Атрибут csrf_token
Атрибут csrf_token класса FlaskForm
хранит строковое значение токена, которое
генерируется Flask-WTF для защиты формы от
подделки межсайтовых запросов. Атрибут не
принимает параметров и доступен как обычное
свойство экземпляра формы. Его значение
подставляется в скрытое поле HTML-формы, а
при отправке проверяется автоматически.
Синтаксис
form.csrf_token
Пример
Давайте создадим простую форму и выведем
значение атрибута csrf_token в консоль:
from flask import Flask
from flask_wtf import FlaskForm
from wtforms import StringField, SubmitField
app = Flask(__name__)
app.config['SECRET_KEY'] = 'secret'
class MyForm(FlaskForm):
name = StringField('Name')
submit = SubmitField('Send')
with app.test_request_context('/'):
form = MyForm()
print(form.csrf_token)
Результат выполнения кода:
"<input id=\"csrf_token\" name=\"csrf_token\" type=\"hidden\" value=\"...\">"
Пример
Давайте выведем только строку токена через
атрибут current_token:
from flask import Flask
from flask_wtf import FlaskForm
from wtforms import StringField, SubmitField
app = Flask(__name__)
app.config['SECRET_KEY'] = 'secret'
class MyForm(FlaskForm):
name = StringField('Name')
submit = SubmitField('Send')
with app.test_request_context('/'):
form = MyForm()
print(form.csrf_token.current_token)
Результат выполнения кода:
"abcde"
Пример
Давайте отрендерим атрибут csrf_token
в Jinja-шаблоне формы:
from flask import Flask, render_template
from flask_wtf import FlaskForm
from wtforms import StringField, SubmitField
app = Flask(__name__)
app.config['SECRET_KEY'] = 'secret'
class MyForm(FlaskForm):
name = StringField('Name')
submit = SubmitField('Send')
@app.route('/', methods=['GET', 'POST'])
def index():
form = MyForm()
return render_template('index.html', form=form)
<form method="post">
{{ form.csrf_token }}
{{ form.name.label }} {{ form.name }}
{{ form.submit }}
</form>
Результат выполнения кода в браузере:
<form method="post">
<input id="csrf_token" name="csrf_token" type="hidden" value="...">
<label for="name">Name</label> <input id="name" name="name" type="text" value="">
<input id="submit" name="submit" type="submit" value="Send">
</form>
Смотрите также
-
класс
FlaskForm,
который является базовым классом для форм -
метод
validate_on_submit,
который проверяет форму при отправке -
метод
hidden_tag,
который выводит все скрытые поля формы -
атрибут
errors,
который содержит ошибки валидации формы