表单对 WTForms 永远无效

Pav*_*dhu 2 python flask wtforms flask-wtforms

我有一个用于登录的 Flask-WTF 表单。显然该表单永远不会有效,无论我输入什么“成功”都不会打印。为什么我的表单没有验证?

class loginForm(Form):
    email = EmailField('email', validators=[InputRequired("Please enter your email address."), Email("Please enter a valid email address.")])
    password = PasswordField('password', validators=[InputRequired("Please enter your password.")])

@app.route('/sign-in', methods=['POST', 'GET'])
def signIn():
    form = loginForm(request.form)
    if form.validate_on_submit():
        print 'success'
        return redirect('/')
    return render_template('signIn.html')
Run Code Online (Sandbox Code Playgroud)
class loginForm(Form):
    email = EmailField('email', validators=[InputRequired("Please enter your email address."), Email("Please enter a valid email address.")])
    password = PasswordField('password', validators=[InputRequired("Please enter your password.")])

@app.route('/sign-in', methods=['POST', 'GET'])
def signIn():
    form = loginForm(request.form)
    if form.validate_on_submit():
        print 'success'
        return redirect('/')
    return render_template('signIn.html')
Run Code Online (Sandbox Code Playgroud)

dav*_*ism 6

Flask-WTF添加了 CSRF 保护字段。如果不存在,CSRF 验证将失败,并且表单将无效。用于form.hidden_tag()在表单中包含任何隐藏字段(包括 CSRF 字段)。

<form method="post">
    {{ form.hidden_tag() }}
    ...
Run Code Online (Sandbox Code Playgroud)

通常,如果表单未验证,您应该form.errors在调用后检查validate以查看有什么问题。

您没有看到错误,因为您没有呈现该字段(或在这种情况下呈现任何字段的错误,但这对解决此问题没有帮助)。如果您在调试器中运行并检查form.errors,您会看到确实存在“CSRF token missing”错误。