2011-12-12 14 views
5

Czy istnieje jakiś ogólny administrator CRUD dla Flask oparty na WTForms?Ogólny administrator CRUD dla kolby, z WTForms?

Obecnie budujemy hybrydowy system zaplecza, w którym administrator musi podać CRUD wiele danych z różnych źródeł, MongoDB, Redis, plik ini, ENVIRON itp. Pisanie konkretnego widoku administratora dla każdego z nich wydaje się stratą czasu, ale wszystkie Rozwiązania administracyjne Flask admin lub WTForms są oparte na pewnego rodzaju stałej ORM, np MongoEngine, AppEngine Datastore, SQLAchemy, itp.

Czy są jakieś bardziej ogólne, które pozwalają automatycznie generować agnostycznego administratora ORM?

muszę mu podać następujące funkcje

  • widoku listy dla grupy elementów, obsługuje pływających edycji lub partia działań byłoby świetnie!
  • Edycja Widok na jednej konkretnej rzeczy dla dodawać/edytować

Wystarczy zdefiniować pewne Wzór formularza, wdrożyć metodę iteracji i automatycznego generowania pełnoprawny administratora.

Czy są dostępne projekty wielokrotnego użytku OSS?

+0

To nie powinno być trudne, aby stworzyć pewne oprogramowanie, które ma w swoich dokumentach, a na jednej podstawie dokumentu, generuje klasę WTForm dla każdego dokumentu (będącego że każdy dokument może mieć różne zestawy danych na nich, nawet jeśli mają reprezentować podobne obiekty - elastyczność no-sql i wszystkich ...). Następnie można użyć planu w kolbie do zarejestrowania funkcji widoku, która pobierałaby obiekt, generowała formularz i wyświetlała formularz użytkownikowi. Introspekcja, jakiego rodzaju widgetu i walidacji potrzebujesz, byłaby trudną częścią, jak pokazuje poniżej odpowiedź. – tkone

Odpowiedz

2

Krótka odpowiedź brzmi: nie, o ile mi wiadomo, nie ma automatycznego generowania ORM dla redis lub MongoDB.

teraz do bardziej szczegółowego wyjaśnienia:

Powodem istnieje pokolenie CRUD na „stałe” ORM, a nie magazynów danych opartych na dokumentacji free-forma jest prosta: bardzo charakter zapisów free-form sprawia, że ​​trudno aby utworzyć schemat.

Spójrzmy na przykład na redis, powiedzmy, że każdy rekord był hashem, np. key 'user- {id}' z polami username, age i registered_on. Co się dzieje, gdy dodajesz nowe pole "lokalizacja" do użytkowników? Cóż, redis to nie obchodzi, po prostu dodajesz pole do dowolnych rekordów, ponieważ są one modyfikowane, nie trzeba wracać i dodawać pola do każdego hasha. Wystarczająco proste.

Ale teraz masz magię CRUD, która próbuje dowiedzieć się, jakie pola pokazać. Powiedzmy, że decydujesz się na pierwszy rekord, aby zobaczyć, jakie pola działają, ale co, jeśli użytkownik-1 nie ma tego nowego pola "lokalizacja"? Teraz CRUD go nie wygeneruje.

Ponadto, ponieważ redis przechowuje każdą wartość jako ciąg znaków, CRUD nie będzie wiedział, że "wiek" na przykład akceptuje tylko liczbę całkowitą, a wartość zarejestrowana to w rzeczywistości ciąg daty w formacie ISO.

Och, ale mówisz, MongoDB ma typy danych! z pewnością, zakładając, że zignorujemy różne pola w przeliczeniu na rekordy, udając, że mamy ten sam zestaw pól w jednym rekordzie, możliwe jest wykonanie jakiegoś automagicznego CRUD? Cóż, tak, będziesz w stanie zrobić trochę lepiej niż z Redis, ponieważ istnieje np. typ daty i typ całkowity, ale istnieją nawet pewne rozbieżności. Powiedzmy, że masz wartość ciągu. Skąd wiadomo, że wartość tego łańcucha wymaga wejścia wieloliniowego (textarea) lub jednoliniowego (typ wejścia = tekst), czy jest dostępna tylko z rozwijanego menu wyboru kilku opcji?

Z tego powodu, jedynym sposobem na zrobienie teoretycznego CRUD dla wielu typów dowolnych byłoby zdefiniowanie z wyprzedzeniem "schematu" (poprzez definicję formularza może?) Dla każdego rekordu, a może zaimplementowane niektóre sortowanie klasy interfejsu/kontraktu, które pozwalało narzędziu CRUD na wyświetlanie listy rekordów w celu pobrania obiektów, pobranie pojedynczego rekordu za pomocą klucza, aktualizację/utworzenie rekordu i usunięcie pojedynczego rekordu za pomocą klucza.

Takie teoretyczne "wtykowe" narzędzie CRUD byłoby naprawdę fajne i bardzo bym chciała zobaczyć, jak ktoś go bierze.

+0

Dzięki za odpowiedź. "byłby, gdybyś zdefiniował z góry" schemat "(poprzez definicję formularza może?)" Dokładnie to miałem na myśli. Wstępnie zdefiniuję formularz (zwany schematem i typem danych) za pomocą metod CRUD, a następnie automatycznie wygeneruję sprawdzonego administratora. – est

3

sugerowałbym sprawdzenie co następuje:

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

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

Można podjąć sbook za skrzynkowego mongoengine i Administracja portowego coleifer jest z kolby-Peewee do niego. Nie wyobrażam sobie, że byłoby to zbyt trudne. Administrator Coleifer dostaje dodatkowe punkty za używanie twitter-bootstrap i mogę powiedzieć, że jest bardzo wrażliwy na problemy.

Pracowałem z mongoengine na kolbie, a także kolby-peewee i oba są doskonałe.

+0

Dzięki za wskazówki, ale celem agnostyka ORM jest zbudowanie administratora na podstawie danych bez schematów, takich jak k-v db, json, itp. Peewee i MongoDB mają poprawione backendy. – est

+0

Nie jestem pewien, co masz na myśli mówiąc, że MongoDB ma "naprawione backendy"? Do tego, co opisujesz, możesz chcieć spojrzeć na minimongo: https://github.com/slacy/minimongo Lekkim zajęciem byłoby zawijanie pól wtopu lub płaskich pól do setattr/getattr z minimongo. Tylko pomysł. –

+0

Mam na myśli monolab kolbowy jest stałym zapleczem z MongoDB. Nie potrzebuję otoki dostępu wokół MongoDB, potrzebuję automatycznego generowania administratora CRUD dla hybrydowych backendów. – est