【问题标题】:data validation for SQLAlchemy declarative modelsSQLAlchemy 声明性模型的数据验证
【发布时间】:2011-06-20 18:58:42
【问题描述】:

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

【问题讨论】:

    标签: python validation model sqlalchemy cherrypy


    【解决方案1】:

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

    【讨论】:

    • 验证方法一次只适用于一个字段。他显然是指依赖于字段之间关系的验证。
    • 通过 (a) 在装饰器 @validates('validates_presence_of', 'validates_length_of') 中列出您要验证的所有字段来处理多个字段 (b) 确保在字段列表中最后声明的字段上触发验证,以便其他字段已经设置好了if key == 'validates_length_of': [code to validate]
    【解决方案2】:

    我写SAValidation 的特定目的是在验证模型数据时避免代码重复。它对我们很有效,至少对我们的用例而言。

    在我们的测试中,我们有 examples of the model's setup 和测试来显示验证工作。

    【讨论】:

      【解决方案3】:

      毕竟我最终还是使用了 WTForms。

      【讨论】:

      • 您是如何避免重复代码的?你能解释一下你是如何使用它的吗?我也是一名 Rails 开发人员,但希望用 flask+sqlalchemy 开发一个应用程序……我见过 WTForms,但对我来说似乎有点陌生,因为你总是在视图中存储验证……而它将其存储在模型中感觉更有效(也更干燥)。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-05
      • 1970-01-01
      • 1970-01-01
      • 2011-03-23
      相关资源
      最近更新 更多