РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
290 of 643 menu

Атрибут meta

Атрибут meta класса FlaskForm содержит внутренний класс Meta, который определяет поведение формы. Через этот класс задаются такие настройки, как csrf (включение или отключение CSRF-защиты), csrf_class (класс CSRF-токена), csrf_secret (секретный ключ), model (модель для привязки данных) и другие. Атрибут meta позволяет переопределить эти параметры на уровне конкретной формы, не меняя глобальные настройки приложения.

Синтаксис

class MyForm(FlaskForm): class Meta: csrf = True csrf_class = ...

Пример

Давайте создадим форму и отключим для неё CSRF-защиту через атрибут meta:

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): class Meta: csrf = False name = StringField('Name') submit = SubmitField('Send') @app.route('/', methods=['GET', 'POST']) def index(): form = MyForm() if form.validate_on_submit(): return f"Hello, {form.name.data}" return render_template('index.html', form=form)

Шаблон для вывода формы:

<form method="post"> {{ form.name.label }} {{ form.name() }} {{ form.submit() }} </form>

Так как CSRF отключён через meta, форма успешно отправится без скрытого поля с токеном.

Пример

Давайте включим CSRF-защиту и зададим собственный класс токена через атрибут meta:

from flask import Flask, render_template from flask_wtf import FlaskForm from wtforms import StringField, SubmitField from wtforms.csrf.core import CSRF app = Flask(__name__) app.config['SECRET_KEY'] = 'secret' class MyCSRF(CSRF): def setup_form(self, form): pass def generate_csrf_token(self, csrf_token_field): return 'token' def validate_csrf_token(self, form, field): pass class MyForm(FlaskForm): class Meta: csrf = True csrf_class = MyCSRF name = StringField('Name') submit = SubmitField('Send') @app.route('/', methods=['GET', 'POST']) def index(): form = MyForm() if form.validate_on_submit(): return f"Hello, {form.name.data}" return render_template('index.html', form=form)

В этом примере через meta указан собственный класс CSRF-защиты MyCSRF, который переопределяет генерацию и проверку токена.

Смотрите также

  • класс FlaskForm,
    который является базовым классом для всех форм
  • атрибут csrf_token,
    который хранит CSRF-токен формы
  • метод validate_on_submit,
    который проверяет отправку и валидность формы
  • метод hidden_tag,
    который выводит скрытые поля формы, включая CSRF-токен
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить