【问题标题】:Form is never valid with WTForms表单对 WTForms 永远无效
【发布时间】:2015-11-02 16:56:32
【问题描述】:

我有一个用于登录的 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】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2016-06-17
      • 1970-01-01
      • 2016-09-24
      • 2016-05-30
      • 1970-01-01
      • 1970-01-01
      • 2017-04-25
      • 1970-01-01
      相关资源
      最近更新 更多