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

时间:2016-07-06 18:17:22

标签: python flask wtforms flask-wtforms csrf-protection

我想使用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():
        ...

2 个答案:

答案 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})