表格永远不会对WTForms有效

问题描述 投票:1回答:1

我有一个用于登录的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')
<form method="POST" action="/sign-in">
    {{ form.email(placeholder='Email', class="textBox") }}
    {{ form.password(placeholder='Password', class="textBox") }}
    <button onclick="submit()">Sign In</button>
</form>
python flask wtforms flask-wtforms
1个回答
2
投票

Flask-WTF adds a CSRF protection field。如果它不存在,CSRF验证将失败,表单将无效。使用form.hidden_tag()在表单中包含任何隐藏字段(包括CSRF字段)。

<form method="post">
    {{ form.hidden_tag() }}
    ...

一般来说,如果表单没有验证,你应该在调用form.errors后检查validate,看看有什么问题。

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

© www.soinside.com 2019 - 2024. All rights reserved.