gpt4 book ai didi

python - Flask-WTF - validate_on_submit() 永远不会执行

转载 作者:IT老高 更新时间:2023-10-28 22:10:50 30 4
gpt4 key购买 nike

我正在使用 Flask-WTF:

这是我的表格:

from flask.ext.wtf import Form, TextField

class BookNewForm(Form):
name = TextField('Name')

这里是 Controller :

@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)

现在的问题是,如果您查看我的打印语句,它总是打印已提交,但它永远不会打印有效并且 validate_on_submit() 永远不会执行。为什么?

最佳答案

您没有在 HTML 表单中插入 CSRF 字段。

<form method=post>
{{ form.csrf_token }}
{{ form.name }}
<input type=submit>
</form>

form.csrf_token 添加到模板 ( docs ) 后,表单将按预期进行验证。

在验证表单后添加 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 -

I created an example on GitHub.

关于python - Flask-WTF - validate_on_submit() 永远不会执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10722968/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com