我正在使用 Flask-WTF:
这是我的表格:
from flask.ext.wtf import Form, TextField
class BookNewForm(Form):
name = TextField('Name')
这是控制器:
@book.route('/book/new', methods=['GET', 'POST'])
def customers_new():
form = BookNewForm()
if form.is_submitted():
print "submitted"
if form.validate():
print "valid"
if form.validate_on_submit():
flash("Successfully created a new book")
return redirect(url_for('.books_show'))
return render_template('views/books_new.html', form=form)
现在的问题是,如果您查看我的打印语句,它总是打印已提交,但它从不打印 valid 并且 validate_on_submit() 从未执行。为什么?
您没有在 HTML 表单中插入 CSRF 字段。
<form method=post>
{{ form.csrf_token }}
{{ form.name }}
<input type=submit>
</form>
添加后form.csrf_token
到模板(docs http://flask-wtf.readthedocs.io/en/latest/quickstart.html#creating-forms),表单将按预期进行验证。
Add print(form.errors)
验证表单后查看出现的错误。errors
验证前将为空。在这种情况下,会出现缺失的错误
@book.route('/book/new_no_csrf', methods=['GET', 'POST'])
def customers_new_no_csrf():
form = BookNewForm()
print(form.errors)
if form.is_submitted():
print("submitted")
if form.validate():
print("valid")
print(form.errors)
if form.validate_on_submit():
flash("Successfully created a new book")
return redirect(url_for('.books_show'))
return render_template('books_new.html', form=form)
{}
submitted
{'csrf_token': [u'CSRF token missing']}
127.0.0.1 - - [29/May/2012 02:01:08] "POST /book/new_no_csrf HTTP/1.1" 200 -
127.0.0.1 - - [29/May/2012 02:01:08] "GET /favicon.ico HTTP/1.1" 404 -
我在 GitHub 上创建了一个示例。 https://github.com/ajford/Flask-wtf-SO-Question-10722968
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)