【问题标题】:When should I validate a form data in Flask我什么时候应该在 Flask 中验证表单数据
【发布时间】:2019-06-06 15:10:24
【问题描述】:

标题有点含糊,但解释如下:

我在表单中有电子邮件字段。 WTF-Forms 验证正确的电子邮件地址,我可以在 validate_on_submit 之后继续。

例如,如果电子邮件已在注册表单中使用,我应该在哪里检查?我可以编写自定义验证器并触发验证错误,或者我可以在验证后继续操作并显示错误消息。

哪种设计更好。有什么优点,有什么缺点。

【问题讨论】:

    标签: python flask flask-wtforms wtforms


    【解决方案1】:

    任何一种设计都可以工作,但我认为将 WTForm 验证留给验证实际字段会更有意义。

    例如,如果您有一个获取以下输入的电子邮件字段:

    notanemail

    这应该会引发验证错误,因为验证字段中的输入是合法的错误。这更有意义。

    total@anemail.com 输入相同的字段 有效,因此应继续验证,然后您可以检查已被占用的电子邮件地址并显示错误。

    这一切都是为了分离关注点。 WTForms 应该只用于验证用户输入的信息是否有效,而不是验证它是否是您数据库的有效输入。

    【讨论】:

    • 是的,在考虑分离关注点时我无法决定。起初,将数据库检查放在 WTForms 验证中看起来更好,但同时感觉 WTForms 应该只进行输入验证。这令人困惑。
    • 它可以...但是可能的设计模式是在提交表单后点击 API 端点。基本上就是这样: if form.validate_on_submit(): # Submit to API endpoint else: # Flash error
    【解决方案2】:

    首先检查有效的语法,然后检查它是否已被其他人使用。检查有效语法可能是一个更便宜的操作,因此从它开始会更有效。

    同样从常识的角度来看,如果地址无效,那么您可能不会关心它是否已经在使用(如果可能的话)。

    【讨论】:

    • 我已经在这样做了。我的问题是我应该把数据库检查代码放在哪里。我可以将数据库检查放在视图(或路由)或表单类中。我无法决定。
    猜你喜欢
    • 2011-06-23
    • 1970-01-01
    • 1970-01-01
    • 2010-12-30
    • 2022-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多