问题 SQLAlchemy声明性模型的数据验证


我在Web应用程序中使用CherryPy,Mako模板和SQLAlchemy。我来自Ruby on Rails背景,我正在尝试为我的模型设置一些数据验证。我无法找出确保“名称”字段在某个其他字段具有值时具有值的最佳方法。我试过用 SAValidation 但它允许我创建新行,其中所需的列为空,即使我使用过 validates_presence_of 在列上。我一直在看 WTForms 但这似乎涉及很多重复的代码 - 我已经使用表中的列设置了我的模型类,为什么我需要再次重复所有这些列只是为了说“嘿这个需要一个值”?我来自“瘦瘦的控制器,脂肪模型“心态一直在我的模型中寻找类似Rails的方法 validates_presence_of 要么 validates_length_of。我应该如何验证我的模型收到的数据,并确保 Session.add/Session.merge 验证失败时失败?


1536
2018-06-20 18:58


起源



答案:


看一下要添加的文档 验证方法。您可以添加一个“更新”方法,该方法接受POST dict,确保存在所需的键,并使用修饰的验证器设置值(如果出现任何错误则引发错误)。


11
2018-06-20 19:07



验证方法一次只适用于一个字段。他显然意味着依赖于字段之间关系的验证。 - Pedro Werneck
通过以下方式使用多个字段:(a)列出要在装饰器中验证的所有字段 @validates('validates_presence_of', 'validates_length_of')  (b)确保您的验证触发器在字段列表中的最后声明的字段上,以便已经设置了其他字段 if key == 'validates_length_of': [code to validate] - naoko


答案:


看一下要添加的文档 验证方法。您可以添加一个“更新”方法,该方法接受POST dict,确保存在所需的键,并使用修饰的验证器设置值(如果出现任何错误则引发错误)。


11
2018-06-20 19:07



验证方法一次只适用于一个字段。他显然意味着依赖于字段之间关系的验证。 - Pedro Werneck
通过以下方式使用多个字段:(a)列出要在装饰器中验证的所有字段 @validates('validates_presence_of', 'validates_length_of')  (b)确保您的验证触发器在字段列表中的最后声明的字段上,以便已经设置了其他字段 if key == 'validates_length_of': [code to validate] - naoko


我写了 SAValidation 用于在验证模型数据时避免代码重复的特定目的。它对我们很有用,至少对我们的用例来说是这样。

在我们的测试中,我们有 模型设置的示例 和测试以显示验证工作。


2
2017-12-14 15:28





毕竟我最终使用了WTForms。


-3
2017-07-01 18:56



你是如何解决代码重复的?你能解释一下你如何使用它吗?我也是一个rails dev,但是想开发一个带有烧瓶+ sqlalchemy的应用程序...我已经看过WTForms但是对我来说似乎有点陌生,因为你总是在视图中存储验证...而它感觉更有效(也更干)将其存储在模型中。 - jbwiv