使用 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})
我想仅使用 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})