表单对 WTForms 永远无效
Form is never valid with WTForms
我有一个用于登录的 Flask-WTF 表单。显然该表单永远无效,无论我输入什么 "success" 都不会打印出来。为什么我的表单未通过验证?
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>
Flask-WTF adds a CSRF protection field. If it's not present, the CSRF validation will fail, and the form will be invalid. Use form.hidden_tag()
在您的表单中包含任何隐藏字段(包括 CSRF 字段)。
<form method="post">
{{ form.hidden_tag() }}
...
一般来说,如果表单未通过验证,您应该在调用 validate
后检查 form.errors
以查看问题所在。
您没有看到错误,因为您没有呈现该字段(或在这种情况下呈现任何字段的错误,但这无助于解决此问题)。如果您在调试器中 运行 并检查 form.errors
,您会发现确实存在 "CSRF token missing" 错误。
我有一个用于登录的 Flask-WTF 表单。显然该表单永远无效,无论我输入什么 "success" 都不会打印出来。为什么我的表单未通过验证?
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>
Flask-WTF adds a CSRF protection field. If it's not present, the CSRF validation will fail, and the form will be invalid. Use form.hidden_tag()
在您的表单中包含任何隐藏字段(包括 CSRF 字段)。
<form method="post">
{{ form.hidden_tag() }}
...
一般来说,如果表单未通过验证,您应该在调用 validate
后检查 form.errors
以查看问题所在。
您没有看到错误,因为您没有呈现该字段(或在这种情况下呈现任何字段的错误,但这无助于解决此问题)。如果您在调试器中 运行 并检查 form.errors
,您会发现确实存在 "CSRF token missing" 错误。