如何使用SQLAlchemy在表单中进行表单验证?

时间:2012-06-29 21:39:23

标签: python validation sqlalchemy pyramid wtforms

我看到很多应用程序使用Form对象来验证数据,然后将数据传递给模型,同时在模型中完全没有验证。我认为最好将核心验证放在模型本身(例如,不管18岁以下的用户),无论上下文如何都要运行。换句话说,我不关心如何创建用户(无论是通过web ui还是命令行),核心规则应始终适用。

我正在使用SQLAlchemy(在Pyramid应用程序中),我希望在模型中定义我的核心验证规则,使我的表单(WTForms)始终遵守模型中定义的核心规则,以便所有数据是一致的。

其他人是否已经这样做了,或类似的东西?

this php解决方案类似的东西。

1 个答案:

答案 0 :(得分:2)

SQLAlchemy允许您注册在某些事件发生时调用的侦听器,例如,您可以在修改模型的字段时注册要触发的事件。来自SQLAlchemy documentation

  

监听器可以选择返回可能修改的版本   value,当retval = True标志传递给listen()时:

def validate_phone(target, value, oldvalue, initiator):
    "Strip non-numeric characters from a phone number"

    return re.sub(r'(?![0-9])', '', value)

# setup listener on UserContact.phone attribute, instructing
# it to use the return value 
listen(UserContact.phone, 'set', validate_phone, retval=True)
     

如上所述的验证功能也可能引发异常   以ValueError停止操作。

因此,如您所见,您可以在模型级别修改或拒绝某些字段的值。

我不确定您的表单库是否与此功能集成,但推出自己的解决方案绝对不会太难。