【问题标题】:How to override the html default "Please fill out this field" when validation fails in Flask?Flask中验证失败时如何覆盖html默认“请填写此字段”?
【发布时间】:2018-11-20 02:58:38
【问题描述】:

我有一个带有DataRequired 验证器和相关错误消息的 Flask-WTF 表单。但是,Chrome 浏览器似乎忽略了我的错误消息,只显示“请填写此字段”。如何让 Flask 覆盖它并显示我的消息?

from flask_wtf import FlaskForm
from wtforms import StringField, PasswordField, SubmitField
from wtforms.validators import DataRequired

class SignupForm(FlaskForm):
    first_name = StringField('First Name', validators=[DataRequired(message='Hey, put in your first name!')])
    last_name = StringField('Last Name', validators=[DataRequired("What, you can't remember your last name?")])
    email = StringField('Email', validators=[DataRequired('Gonna need your email address!')])
    password = PasswordField('Password', validators=[DataRequired('Really need a password, Dude!')])
    submit = SubmitField('Sign Up')

【问题讨论】:

    标签: python flask flask-wtforms wtforms


    【解决方案1】:

    在我的代码中工作:

    在 html 文件上:

    {{ CustomForm(form.birth, class="form-control", required=False ) }}
    

    .py 文件:

    birth = DateField('date of birth', validators=[DataRequired(message="My custom message")])
    

    【讨论】:

      【解决方案2】:

      从WTForms 2.2 开始,当字段具有设置"required" flag 的验证器时,将呈现HTML required 属性。这允许客户端执行一些基本的验证,节省到服务器的往返行程。

      你应该把它留给浏览器来处理。这些消息是标准的,并针对用户计算机的区域进行了调整。有一个 JavaScript API 可以控制这些消息(请参阅 Stack Overflow 和 MDN),尽管 WTForms 不提供与它的任何集成(不过,这是一个扩展的好主意)。

      如果您真的想要禁用此功能,可以在渲染字段时传递required=False。

      {{ form.name(required=False) }}
      

      您可以通过覆盖 Meta.render_field 来禁用整个表单。

      class NoRequiredForm(Form):
          class Meta:
              def render_field(self, field, render_kw):
                  render_kw.setdefault('required', False)
                  return super().render_field(field, render_kw)
      

      您可以通过从禁用它的基本表单继承来为多个表单禁用它。

      class UserForm(NoRequiredForm):
          ...
      

      您还可以通过在 HTML form 标记上设置 novalidate 属性来禁用客户端验证,而无需更改太多代码。

      <form novalidate>
      
      </form>
      

      See the discussion on the pull request adding this behavior.

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-01-17
        • 2014-09-02
        • 2011-02-13
        • 1970-01-01
        • 2014-06-01
        相关资源
        最近更新 更多