Создание токена CSRF вручную с помощью Flask WTF-Forms

Я хотел бы создать и заполнить Flask WTF-Form, используя только код Python. Однако форма не генерирует токен CSRF автоматически, когда я создаю ее с помощью кода Python. Есть ли способ сделать это вручную?

Рассматриваемая форма:

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():
        ...

person Philip    schedule 06.07.2016    source источник


Ответы (2)


Вы эффективно отключите защиту CSRF, сгенерировав и передав токен в форму локально. Это эффективно только тогда, когда пользователь отправляет ранее сгенерированный токен.

Поскольку вы не используете защиту CSRF, отключите ее. Вы также можете передать request.args в качестве источника данных.

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

Если вы хотите использовать CSRF для этой формы, форма должна отправить поле csrf_token, которое может быть отображено с помощью {{ form.csrf_token }} или {{ form.hidden_tag() }}.

person davidism    schedule 06.07.2016

В новейшей версии flask_wtf (0.14.2) вы можете отключить токен csrf таким образом.

form = URLForm(request.args, meta={'csrf': False})
person Lukasz Dynowski    schedule 08.08.2018