2011-12-12 9 views
5

¿hay algún administrador CRUD genérico para Flask basado en WTForms?Generic CRUD admin for Flask, with WTForms?

Actualmente estamos construyendo un sistema híbrido backend donde el administrador debe CRUD un montón de datos de varias fuentes, MongoDB, Redis, ini file, ENVIRON, etc. Escribir una vista de administración específica para cada uno de ellos parece una pérdida de tiempo, pero todos Las soluciones de administración de Flask o WTForms se basan en algún tipo de ORM fijo, por ejemplo Mongo Engine, AppEngine Datastore, SQLAchemy, etc.

¿Hay alguno más genérico que permita administrar ORM-agnostic automáticamente?

que necesitamos para poder proporcionar las siguientes funciones

  • de vista de lista para un grupo de artículos, apoyar las acciones de edición en línea o por lotes sería grande!
  • vista de edición para un artículo específico para añadir/editar

Sólo definir algún modelo de formulario, implementar un método de iteración y de auto generar un administrador de hecho y derecho.

¿Hay algún proyecto OSS reutilizable como este?

+0

No debería ser muy difícil crear algún tipo de software que lleva en sus documentos, y en función de cada documento, genera una clase WTForm para cada documento (siendo que cada documento puede tener diferentes conjuntos de datos en ellos, incluso si están destinados a representar objetos similares - la flexibilidad de no-sql y todo ...). Luego, podría usar un modelo en el matraz para registrar una función de vista que atrape un objeto, genere el formulario y muestre el formulario al usuario. Introspección de qué forma de widget y validación que necesita sería la parte difícil, como la respuesta a continuación indica sin embargo. – tkone

Respuesta

2

La respuesta corta es no, hasta donde yo sé, no hay ORM de autogeneración para redis o MongoDB.

Ahora, para una explicación más detallada:

La razón por la cual existe la generación CRUD para 'fijos' almacenes de datos ORM y no se basa en los registros de forma libre es simple: la naturaleza misma de los registros de forma libre hace que sea difícil para crear un esquema

Echemos un vistazo a redis, por ejemplo, digamos que cada registro era un hash, p. Ej. clave 'user- {id}' con campos username, age y registered_on. Ahora, ¿qué sucede cuando agrega una nueva "ubicación" de campo a los usuarios? Bueno, a Redis no le importa, solo agrega el campo a cualquier registro a medida que se modifican, sin necesidad de volver atrás y agregar el campo a cada hash. Suficientemente simple.

Pero ahora, usted tiene su magia CRUD, que trata de averiguar qué campos mostrar. Decir que decide mirar el primer registro para ver qué campos existen, pero ¿qué sucede si al usuario-1 le falta ese nuevo campo de "ubicación"? Ahora el CRUD no lo generará.

Además, como redis almacena cada valor como una cadena, un CRUD no sabría que 'edad', por ejemplo, solo acepta un entero y register_on es en realidad una cadena de fecha con formato ISO.

Oh, pero dices, ¡MongoDB tiene tipos de datos! seguramente, suponiendo que ignoramos los diferentes campos por asignación de registro, simulando que tenemos el mismo conjunto de campos por registro, ¿es posible hacer allí algunos CRUD automáticos? Bueno, sí, podrás hacerlo un poco mejor que con Redis, porque hay, por ejemplo, un tipo de fecha y tipo entero, pero hay algunas discrepancias incluso entonces. Digamos que tiene un valor de cadena. ¿Cómo sabe si ese valor de cadena requiere una entrada de varias líneas (área de texto) o línea única (tipo de entrada = texto), o solo está disponible en una selección desplegable de algunas opciones?

Debido a esto, la única forma de realmente hacer un CRUD teórico para muchos tipos de forma libre sería si definió de antemano el 'esquema' (a través de una definición de Formulario quizás?) Para cada registro, y tal vez implementó algunos tipo de clase de interfaz/contrato que permitió a una herramienta CRUD listar registros para recuperar objetos, recuperar un registro individual por clave, actualizar/crear un registro y eliminar un registro individual por clave.

Una herramienta CRUD tan teórica y "enchufable" sería genial, y me encantaría ver a alguien haciéndolo.

+0

Gracias por la respuesta. "sería si definió de antemano el 'esquema' (¿a través de una definición de formulario quizás?)" Esto es exactamente lo que quise decir. Prefijo un Formulario (también conocido como esquema y tipo de datos), con métodos CRUD, y luego genero automáticamente un administrador validado. – est

3

Yo sugeriría que examina el siguiente:

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

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

Usted podría tomar matraz de mongoengine de Sbook y admin puerto de coleifer del frasco-peewee a ella. No me imagino que esto sería demasiado difícil. El administrador de Coleifer obtiene puntos adicionales por su uso de Twitter-bootstrap y puedo decirle que él es muy receptivo a los problemas.

He trabajado con mongoengine en matraz y también flask-peewee y ambos son excelentes.

+0

Gracias por las sugerencias, pero el objetivo de ORM-agnostic es crear administradores además de datos sin esquema, como k-v db, json, etc. Peewee y MongoDB tienen servidores de fondo fijos. – est

+0

No estoy seguro de qué quiere decir cuando dice que MongoDB tiene "back-end fijos"? Para lo que describes, es posible que desees consultar minimongo: https://github.com/slacy/minimongo. Sería poco trabajo envolver un campo wtform o flatland en setattr/getattr con minimongo. Solo una idea. –

+0

Me refiero a que el matraz-mongoengine está fijo en el backend con MongoDB. No necesito un contenedor de acceso alrededor de MongoDB, necesito generar automáticamente CRUD admin para backends híbridos. – est