2011-12-12 21 views
5

có bất kỳ quản trị viên CRUD chung nào cho Flask dựa trên WTForms không?Quản trị CRUD chung cho Flask, với WTForms?

Hiện tại chúng tôi đang xây dựng hệ thống phụ trợ hỗn hợp, nơi quản trị viên phải CRUD nhiều dữ liệu từ nhiều nguồn khác nhau, MongoDB, Redis, ini file, ENVIRON, v.v. Viết chế độ xem quản trị cụ thể cho mỗi người có vẻ như lãng phí thời gian, nhưng tất cả Các giải pháp quản trị Flask admin hoặc WTForms dựa trên một số loại ORM cố định, ví dụ MongoEngine, AppEngine Datastore, SQLAchemy, v.v.

Có cái nào chung chung hơn cho phép quản trị viên ORM-thuyết bất khả tri được tạo tự động không?

tôi cần nó để cung cấp các chức năng sau

  • xem danh sách cho một nhóm các mặt hàng, hỗ trợ inline chỉnh sửa hoặc hàng loạt hành động sẽ là tuyệt vời!
  • chỉnh sửa điểm cho một mục cụ thể cho thêm/chỉnh sửa

Chỉ cần xác định một số mô hình mẫu, thực hiện một phương pháp lặp đi lặp lại và tự động tạo ra một quản trị viên đầy đủ.

Có bất kỳ dự án PMNM nào có thể sử dụng lại như thế này không?

+0

Nó không nên rất khó để tạo ra một số phần mềm mà mất trong tài liệu của bạn, và trên cơ sở mỗi tài liệu, tạo ra một lớp WTForm cho mỗi tài liệu (được rằng mỗi tài liệu có thể có bộ dữ liệu khác nhau trên chúng ngay cả khi chúng có nghĩa là đại diện cho các đối tượng tương tự - tính linh hoạt của không có sql và tất cả ...). Sau đó, bạn có thể sử dụng một kế hoạch chi tiết trong bình để đăng ký một chức năng xem có thể lấy một đối tượng, tạo biểu mẫu và hiển thị biểu mẫu cho người dùng. Nhìn vào những gì hình thức widget và xác nhận bạn cần sẽ là một phần khó khăn, như câu trả lời dưới đây chỉ ra mặc dù. – tkone

Trả lời

2

Câu trả lời ngắn gọn là không, theo như tôi biết, không có ORM tạo tự động cho redis hoặc MongoDB.

Bây giờ cho một lời giải thích chi tiết hơn:

Lý do tại sao có tồn tại hệ CRUD cho 'cố định' kho dữ liệu của ORM và không dựa vào hồ sơ dạng tự do rất đơn giản: chính bản chất của hồ sơ dạng tự do gây khó khăn để tạo một lược đồ.

Hãy xem xét lại ví dụ, giả sử mỗi bản ghi là một hàm băm, ví dụ: khóa 'user- {id}' với tên người dùng, tuổi và tên miền đã đăng ký. Bây giờ, điều gì sẽ xảy ra khi bạn thêm một trường 'vị trí' mới cho người dùng? Vâng, redis không quan tâm, bạn chỉ cần thêm trường vào bất kỳ bản ghi nào khi chúng được sửa đổi, không cần phải quay lại và thêm trường vào mỗi băm. Đủ đơn giản.

Nhưng bây giờ, bạn có ma thuật CRUD của bạn, cố gắng tìm ra trường nào sẽ hiển thị. Giả sử bạn quyết định xem bản ghi đầu tiên để xem trường nào tồn tại, nhưng nếu người dùng-1 thiếu trường 'vị trí' mới thì sao? Bây giờ CRUD sẽ không tạo ra nó.

Hơn nữa, vì redis lưu trữ mọi giá trị dưới dạng chuỗi, CRUD sẽ không biết rằng 'tuổi' ví dụ chỉ chấp nhận số nguyên và registered_on thực sự là chuỗi ngày được định dạng ISO.

Ồ, nhưng bạn nói, MongoDB có kiểu dữ liệu! chắc chắn, giả sử chúng ta bỏ qua các lĩnh vực khác nhau cho mỗi phụ cấp kỷ lục, giả vờ chúng ta có cùng một tập hợp các trường cho mỗi bản ghi, có thể làm một số CRUD tự động ở đó? Vâng vâng, bạn sẽ có thể làm tốt hơn một chút so với Redis, bởi vì có ví dụ một loại ngày và kiểu số nguyên, nhưng có một số khác biệt ngay cả sau đó. Giả sử bạn có một giá trị chuỗi. Làm cách nào để bạn biết liệu giá trị chuỗi đó có yêu cầu đầu vào nhiều dòng (văn bản) hoặc một dòng (loại đầu vào = văn bản) hay thậm chí chỉ có sẵn từ một lựa chọn thả xuống của một vài lựa chọn?

Bởi vì điều này, cách duy nhất để thực sự làm CRUD lý thuyết cho nhiều dạng tự do sẽ là nếu bạn định nghĩa trước 'lược đồ' (thông qua định nghĩa biểu mẫu?) Cho mỗi bản ghi và có thể thực hiện một số loại giao diện lớp/hợp đồng cho phép một công cụ CRUD liệt kê các bản ghi để truy xuất các đối tượng, để lấy một bản ghi duy nhất bằng khóa, để cập nhật/tạo bản ghi và xóa một bản ghi duy nhất bằng khóa.

Công cụ CRUD 'có thể cắm được' lý thuyết như vậy sẽ thực sự tuyệt vời và tôi rất muốn thấy ai đó tiếp nhận nó.

+0

Cảm ơn bạn đã trả lời. "sẽ là nếu bạn đã xác định trước 'lược đồ' (thông qua định nghĩa Biểu mẫu có thể?)" Đây chính xác là những gì tôi muốn nói. Tôi xác định trước một Biểu mẫu (còn gọi là lược đồ và kiểu dữ liệu), với các phương thức CRUD, sau đó tự động tạo ra quản trị viên đã xác thực. – est

3

tôi sẽ đề nghị kiểm tra như sau:

https://github.com/sbook/flask-mongoengine

https://github.com/coleifer/flask-peewee

Bạn có thể mất bình-mongoengine sbook và quản trị cổng coleifer từ bình-Peewee với nó. Tôi không tưởng tượng điều này sẽ là quá khó khăn. Quản trị viên của Coleifer nhận thêm điểm cho việc sử dụng twitter-bootstrap và tôi có thể nói với bạn rằng anh ấy rất nhạy cảm với các vấn đề.

Tôi đã làm việc với mongoengine trên bình và cũng là bình-peewee và cả hai đều tuyệt vời.

+0

Cảm ơn lời khuyên, nhưng điểm của ORM-thuyết bất khả tri là xây dựng quản trị trên đầu trang của dữ liệu lược đồ ít hơn, chẳng hạn như k-v db, json, vv Peewee và MongoDB đã cố định phụ trợ. – est

+0

Tôi không chắc chắn ý của bạn là gì khi bạn nói MongoDB có "backend cố định"? Đối với những gì bạn mô tả, bạn có thể muốn xem minimongo: https://github.com/slacy/minimongo Nó sẽ là công việc nhẹ để quấn một wtform hoặc các lĩnh vực bằng phẳng vào setattr/getattr với minimongo. Chỉ là một ý tưởng. –

+0

Tôi có nghĩa là flask-mongoengine là phụ trợ cố định với MongoDB. Tôi không cần một wrapper truy cập xung quanh MongoDB, tôi cần tự động tạo ra quản trị CRUD cho backends lai. – est

Các vấn đề liên quan