我想使用python代码创建并填写Flask WTF-Form。但是,当我使用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():
...
答案 0 :(得分:1)
您可以通过在本地生成并将令牌传递给表单来有效地禁用CSRF保护。它仅在用户提交先前生成的令牌时才有效。
由于您未使用CSRF保护,请将其禁用。您也可以将request.args
作为数据来源传递。
form = URLForm(request.args, csrf_enabled=False)
如果您想在此表单中使用CSRF,则表单需要发送csrf_token
字段,该字段可以使用{{ form.csrf_token }}
或{{ form.hidden_tag() }}
呈现。
答案 1 :(得分:0)
在最新版本的 flask_wtf(0.14.2)中,您可以通过这种方式禁用csrf令牌。
form = URLForm(request.args, meta={'csrf': False})