2011-01-27 20 views
9

En aplicaciones de la vida real, si utilizo un framework de formularios, inevitablemente terminaré peleándome en algún momento.¿Patrón de diseño más limpio para mostrar los datos del formulario y los errores de validación?

Me interesan los patrones de mejores prácticas para crear formularios en un sitio web. La referencia a las implementaciones en cualquier idioma sería una ventaja (normalmente trabajo en Python). Estoy particularmente interesado en el problema de crear/mostrar los formularios para el usuario final.

Así es como veo el tema. La mayoría de las partes del flujo de trabajo de formularios se pueden manejar con componentes relativamente livianos que puedo extraer de frameworks como formencode y formish. Por "la mayoría de las partes" me refiero a descodificando los datos del formulario enviados a una estructura de datos sensible (por ejemplo, los campos repetidos en el formulario deben convertirse en listas en Python); alineando los valores en los tipos que queremos (por ejemplo, un campo "edad" debe convertirse en un número entero); y validando los valores (por ejemplo, "la edad no debe estar en blanco").

La parte con la que termino luchando es hacer y mostrar los formularios ellos mismos. Muchos frameworks (por ejemplo, FormAlchemy) combinan estrechamente sus esquemas, validaciones y modelos con algún tipo de esquema de generación de widgets, que no me gusta.

las tareas implicadas en la toma de una forma son:

  • Hacer los widgets dinámicos (por ejemplo, una lista de selección con los valores de una base de datos)
  • en bucle sobre fieldsets repetitiva (por ejemplo una lista de nombre, pares de edad que representan cada uno una persona)
  • Incorporación de los valores existentes en los campos de formulario (de una estructura de datos)
  • Viendo errores de validación siguientes para formar campos o en la parte superior de la página

Las opciones que veo para hacer esto son:

  • generan, sobre la base de los widgets que se definen en el esquema (por ejemplo, post-proceso Django)
  • formas, mediante la aplicación de una estructura de datos que contiene errores y valores de una plantilla HTML (por ejemplo htmlfill)
  • aceptan que para todos, pero los casos más simples, usted puede también comenzar desde el principio por que codifica la lógica (bucles, mensaje de error, etc.) manualmente en cada una de sus plantillas de formulario

¿hay otros patrones para manejar el problema? ¿Cuáles son los pros y los contras de cada uno?

Los marcos (Python) He mirado en/había señalado hasta el momento son: flatland, formencode, FormAlchemy, formish, WTForms, Django formas, web2py, deform, FormConvert y web.py

actualización : No llegué muy lejos al responder la pregunta sobre las mejores prácticas para compilar formularios, pero tomé la decisión con mi proyecto actual de deform para/deformador, que es una forma sensata de manejar la serialización, etc. más importante está bien documentado y bien probado. Voy a evitar la generación de formas para todos, excepto para las formas más simples.

+0

Gracias por hacer esta pregunta de la manera que lo hizo. Mis requisitos son casi idénticos a los tuyos. Según su actualización, abandonó la generación de formularios. Pero en cuanto a rellenar formularios con valores, ¿fue capaz de encontrar una buena solución? ¿Estás utilizando htmlfill para este propósito, por ejemplo? Gracias – adowds

Respuesta

3

Puede intentar django. Tiene el módulo forms, que proporciona muchos mecanismos útiles para formularios web.

+0

Como mencioné, ya conozco a Django. Me interesan los patrones de diseño (especialmente para la parte del problema que cubre el formulario), en lugar de grandes marcos. Además, la implementación de formularios de Django está estrechamente vinculada a todo el marco. – seb

1

También existe la clase de formulario web.py que puede encontrar interesante. Hay ejemplos en su cookbook.

+0

No había mirado en web.py, gracias, pero parece ser otro marco de generación de formularios. ¿Qué lo haría diferente/mejor que, por ejemplo, formencode? – seb

1

Un panel con varios autores biblioteca de formularios se presentó en PyCon 2010, lo que podría ser relevante a su pregunta:

http://www.pycon.tv/video/184/

+0

Gracias, esa es una discusión útil – seb

+0

Este enlace parece estar roto. –

+0

Gracias, @Matthew, el viejo enlace estaba roto; Encontré el video en otro lugar y he actualizado el enlace. ¡Gracias! –

0

has visto a Bruno de django-floppyforms? No responde su pregunta, pero vale la pena ser consciente de que se está haciendo.

1

Recientemente he usado flatland para manejar una forma compleja y la encontré muy flexible. No hay una biblioteca de widgets, pero tiene un poderoso generador/filtro de HTML, y como pointed out en la documentación, es bastante simple escribir sus propios widgets. No dejes que la versión "0.0.2" te engañe, la biblioteca es bastante madura y estable.

Cuestiones relacionadas