#flask #flask-wtforms #csrf-token
#фляжка #flask-wtforms #csrf-токен
Вопрос:
У меня есть форма Flask (WTForms), которая состоит из нескольких вставленных полей формы. Я не знаю, как быть с тем фактом, что каждая подформа и основная форма генерируют свой собственный токен csrf.
Должен ли я отображать все токены в шаблоне? Деактивировать csrf для «внутренних» форм? Само представление будет доступно не всем (только штатным пользователям).
Вот такие forms.py:
class PersonForm(FlaskForm):
name = StringField('Name')
role = HiddenField(validators=[AnyOf(values=['A', 'T', 'R', 'I'])])
class CreatorsForm(FlaskForm):
authors = FieldList(FormField(PersonForm, default={'role': 'A'), min_entries=3)
translators = FieldList(FormField(PersonForm, default={'role': 'T'), min_entries=3)
submit = SubmitField('Submit')
Представленный код — это всего лишь начало гораздо большей формы, которую я должен был бы преобразовать в пошаговую форму. Поэтому я визуализирую поля вручную, и мой шаблон выглядит следующим образом:
<form class="form form-horizontal" action="" method="POST" accept-charset="utf-8">
{{ form.hidden_tag() }}
<div class="container" id="authors">
<h4>{{ form.authors.label }}</h4>
{% for f in form.authors %}
<p> {{ f.form.name.label }} {{ f.form.name() }}</p>
{% endfor %}
{% for error in form.authors.errors %}
<span style="color: red">{{ error }}</span>
{% endfor %}
</div> <br>
<div class="container" id="translators">
<h4>{{ form.translators.label }}</h4>
{% for f in form.translators %}
<p>{{ f.form.name.label }} {{ f.form.name() }}</p>
{% endfor %}
{% for error in form.translators.errors %}
<span style="color: red">{{ error }}</span>
{% endfor %}
</div>
<p>{{ form.submit() }}</p>
</form>