【问题标题】:Flask-WTF validate_on_submit() not executedFlask-WTF validate_on_submit() 未执行
【发布时间】:2023-03-15 21:15:02
【问题描述】:

我无法弄清楚为什么我的表单无法验证。我已确保将 CSRF 字段插入到带有 form.hidden_tag 的 HTML 中

这是我的注册表单的代码:

from flask_wtf import FlaskForm
from wtforms import StringField, PasswordField, SubmitField, BooleanField
from wtforms.validators import DataRequired, Length, Email, EqualTo


class RegistrationForm(FlaskForm):
    username = StringField('Username', validators=[DataRequired(), Length(min=2, max=20)])
    email = StringField('Email', validators=[DataRequired(), Email()])
    password = PasswordField('Password', validators=[DataRequired()])
    confirm_password = PasswordField('Confirm Password', validators=[DataRequired(), EqualTo(password)])
    submit = SubmitField('Register')

这是我正在检查表单是否经过验证的函数。它确实提交了,因为程序将“提交”打印到我的终端中

@app.route('/register', methods=['GET', 'POST'])
def register():
    form = RegistrationForm()
    if form.is_submitted():
        print("submitted")
    if form.validate_on_submit():
        flash(f'Account created for {form.username.data}!', 'success')
        return redirect(url_for('home'))
    print(forms.errors)
    return render_template('register.html', title='Register', form=form)

使用forms.errors,我收到以下错误消息:

{'confirm_password': ["Invalid field name '<UnboundField(PasswordField, ('Password',), {'validators': [<wtforms.validators.DataRequired object at 0x00000205913D2F28>]})>'."]}

我不确定这意味着什么。

如果有帮助,我将所有当前代码都放在 GitHub 上:https://github.com/tomajohnson21/FakeBook

【问题讨论】:

    标签: flask-wtforms wtforms


    【解决方案1】:

    您使用的是类成员密码而不是“字段名”,因此您会收到错误消息。

    不正确:

    EqualTo(password)
    

    正确:

    EqualTo('password')
    

    有一个 EqualTo 的例子 WTForms validators documentation

    【讨论】:

      【解决方案2】:

      密码只能用单引号解决。

      confirm_password = PasswordField('Confirm Password', validators=[DataRequired(), EqualTo('password')])
      

      【讨论】:

        猜你喜欢
        • 2012-05-30
        • 2018-03-15
        • 1970-01-01
        • 2016-10-01
        • 1970-01-01
        • 2018-07-26
        • 2023-03-30
        • 1970-01-01
        相关资源
        最近更新 更多