【问题标题】:Generating a CSRF token manually with Flask WTF-Forms使用 Flask WTF-Forms 手动生成 CSRF 令牌
【发布时间】:2016-11-08 22:02:39
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 2017-01-08
        • 2018-03-11
        • 2017-09-27
        • 2018-07-16
        • 2017-05-24
        • 2022-12-21
        • 2010-12-20
        • 1970-01-01
        • 2019-04-08
        相关资源
        最近更新 更多