Форма Flask WTF с полями формы — несколько токенов csrf

#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>