【问题标题】:How can I do form-level validation in WTForms?如何在 WTForms 中进行表单级验证?
【发布时间】:2021-08-07 16:44:34
【问题描述】:

我正在使用 wtforms 在应用程序中构建大量表单。我需要执行并向用户显示“表单级”验证错误。

没有记录/支持的方法可以做到这一点。那也行。

我知道我可以覆盖表单验证方法,在那里执行我的检查,并将我的其他验证错误放在表单的 _errors 属性中。

这种方法的问题在于 form._errors 还包含所有字段级验证错误(当然,也可以通过每个字段的 errors 属性访问)。

所以,我希望有一种干净、API 一致的方式来返回 表单级验证错误。我可以自己破解 _error 属性,但我对这个问题的其他解决方案感兴趣。

您将如何在 wtforms 中进行表单级验证?

【问题讨论】:

标签: wtforms flask-wtforms


【解决方案1】:

wtforms google group 中的解决方法是:

最简单的方法是将其中一个字段的 validate_foo 方法添加到您的表单定义中,然后检查其他字段。所有验证器都接收表单和字段作为参数。

但我宁愿使用烧瓶flash messages

我已经在 wtforms 中填写了feature request,也许他们实现了这个功能。 :)

【讨论】:

    【解决方案2】:

    正如 snakecharmerb 所说:“表单级别验证将在 wtforms 3 (github commit) 中提供”

    但目前 WTForms 3 尚未发布,所以如果您的条件不满足,我建议您覆盖 validate() 表单方法并附加 flash 消息。下面的例子。

    from flask import flash
    
    def validate(self):
        result = super().validate()  # Call to parent class' validate method
        valid = this or that  # Your testing condition
        if not valid:  # Attach flash message if your validation fails
            flash('Your message', 'form_error')
        return result and valid
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-05-30
      • 2019-04-05
      • 1970-01-01
      • 2017-11-28
      • 1970-01-01
      • 1970-01-01
      • 2013-11-18
      • 2023-02-09
      相关资源
      最近更新 更多