使用 Flask WTF-Forms 手动生成 CSRF 令牌

Generating a CSRF token manually with Flask WTF-Forms

我想仅使用 python 代码创建并填写 Flask WTF 表单。但是,当我使用 python 代码创建表单时,它不会自动生成 CSRF 令牌。有没有办法手动执行此操作?

相关表格:

from flask_wtf import Form
from wtforms import StringField
from wtforms.validators import DataRequired, URL

class URLForm(Form):
    url = StringField('url', validators=[DataRequired(), URL(), Level3Url()])

我用来生成表单的代码:

from forms import URLForm
form = URLForm()
if 'url' in request.args:
    url = request.args.get('url')
    form.url.data = url
    if form.validate():
        ...

您可以通过在本地生成令牌并将其传递给表单来有效地禁用 CSRF 保护。它仅在用户提交之前生成的令牌时有效。

由于您没有使用 CSRF 保护,请将其禁用。您还可以通过 request.args 作为数据源。

form = URLForm(request.args, csrf_enabled=False)

如果要对这个表单使用CSRF,那么表单需要发送csrf_token字段,可以用{{ form.csrf_token }}{{ form.hidden_tag() }}渲染。

在最新版本的 flask_wtf (0.14.2) 中,您可以通过这种方式禁用 csrf 令牌。

form = URLForm(request.args, meta={'csrf': False})