如何使用SQLAlchemy将表单验证放入模型中?

2024-05-23 20:57:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我看到很多应用程序使用表单对象来验证数据,然后将数据传递给模型,而在模型中完全没有进行任何验证。我觉得最好是把核心验证放在模型本身(例如,任何年龄在18岁以下的用户都不能),不管上下文如何都可以运行。换句话说,我不关心如何创建用户(无论是通过webui还是命令行),核心规则应该始终适用。在

我正在使用SQLAlchemy(在金字塔应用程序中),我想在模型中定义我的核心验证规则,我的表单(WTForms)总是尊重模型中定义的核心规则,这样所有数据都是一致的。在

有没有其他人已经这样做了,或者类似的事情?在

类似于this php解的东西。在


Tags: 数据对象命令行用户模型应用程序表单核心
1条回答
网友
1楼 · 发布于 2024-05-23 20:57:24

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

Listeners have the option to return a possibly modified version of the value, when the retval=True flag is passed to 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)

A validation function like the above can also raise an exception such as ValueError to halt the operation.

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

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

相关问题 更多 >