Estoy usando CherryPy, plantillas de Mako y SQLAlchemy en una aplicación web. Vengo de un fondo de Ruby on Rails y estoy tratando de configurar algunos datos de validación para mis modelos. No puedo encontrar la mejor manera de asegurar, digamos, que un campo 'nombre' tiene un valor cuando otro campo tiene un valor. Intenté usar SAValidation, pero me permitió crear nuevas filas donde una columna requerida estaba en blanco, incluso cuando usé validates_presence_of
en la columna. He estado buscando en WTForms pero parece implicar una gran cantidad de código duplicado. Ya tengo mi clase de modelo configurada con las columnas en la tabla, ¿por qué tengo que repetir todas esas columnas nuevamente para decir "oye esto uno necesita un valor "? Vengo de la mentalidad de "skinny controller, fat model" y he estado buscando métodos tipo Rails en mi modelo como validates_presence_of
o validates_length_of
. ¿Cómo debo proceder para validar los datos que recibe mi modelo y asegurar que Session.add
/Session.merge
fallan cuando las validaciones fallan?validación de datos para modelos declarativos SQLAlchemy
Respuesta
Terminé usando WTForms después de todo.
Eche un vistazo a la documentación para agregar validation methods. Simplemente podría agregar un método de "actualización" que tome el díc POST, se asegure de que las claves requeridas estén presentes, y use los validadores decorados para establecer los valores (provocando un error si algo falla).
Los métodos de validación solo funcionan para un campo a la vez. Obviamente, significa validación que depende de la relación entre los campos. –
Escribí SAValidation con el propósito específico de evitar la duplicación de código cuando se trata de validar los datos del modelo. Funciona bien para nosotros, al menos para nuestros casos de uso.
En nuestras pruebas, tenemos examples of the model's setup y pruebas para mostrar los trabajos de validación.
- 1. ¿Deben dos modelos declarativos SQLAlchemy compartir la misma declarative_base()?
- 2. SQLAlchemy "event.listen" para todos los modelos
- 3. Optimizaciones SqlAlchemy para modelos de objetos de solo lectura
- 4. Reutilización de modelos SQLAlchemy en proyectos
- 5. Modelos anidados y validación principal
- 6. Validación parcial de ASP.NET MVC 3 Modelos
- 7. Razor: ayudantes HTML declarativos
- 8. modelos y métodos de instancia: session aware (sqlalchemy)
- 9. Unir base de datos cruzada en sqlalchemy
- 10. Validación simple de datos
- 11. ¿Serializar modelos SQLAlchemy para una API REST respetando el control de acceso?
- 12. Modelos de vista de mapa a KnockoutJS Validación
- 13. Validación remota con AdditionalFields en la colección de modelos
- 14. Interfaz de administración para SQLAlchemy?
- 15. ¿Hay un inspectdb equivalente de Django para SQLAlchemy?
- 16. OSGi: ¿Blueprint reemplaza los servicios declarativos?
- 17. Frasco: ¿cómo puedo combinar Flask-WTF y Flask-SQLAlchemy para editar modelos db?
- 18. Modelos de datos útiles de SQL?
- 19. SQLAlchemy IntegrityError e importaciones de datos masivos
- 20. Lisp seguridad/validación de datos
- 21. problemas para obtener una pylint para encontrar métodos heredados en pylons/modelos SA
- 22. ¿Proporciona mensajes de error localizados para la validación de modelos no atribuidos en ASP.Net MVC 2?
- 23. Protocol Buffers y modelos de datos internos
- 24. sqlalchemy existe para la consulta
- 25. La mejor manera de organizar las carpetas que contienen los modelos SQLAlchemy
- 26. Patrones de diseño de validación de datos
- 27. ¿Hay alguna manera de realizar la validación de forma transparente en objetos SQLAlchemy?
- 28. Lógica de dominio vs validación de datos
- 29. Validación de datos serializados de rieles
- 30. Configurando Django para usar SQLAlchemy
¿Cómo se solucionó la duplicación de código? ¿Puedes explicarme un poco cómo lo estás usando? También soy un desarrollador de rails, pero estoy buscando desarrollar una aplicación con matraz + sqlalchemy ... He visto WTForms, pero me parece un poco extraño que siempre esté almacenando validación en la vista ... mientras se siente más válido (y más seco) para almacenarlo en el modelo. – jbwiv