FlaskWTF-从不执行validate_on_submit()

2024-09-29 05:31:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我在用烧瓶:

这是我的表格:

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)

现在的问题是,如果你看我的print语句,它总是打印提交的,但它从不打印有效的,validate_on_submit()也从不执行。为什么?


Tags: formnewreturnif烧瓶onbooksvalidate
3条回答

在模板html文件中的标记后插入此项:

 {{ form.csrf_token }} 

可以打印错误

print form.errors

或者

app.logger.debug(form.errors)

如果出现csrf错误,则应在模板中设置form.csrf_token

您没有在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.

相关问题 更多 >