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

Атрибут data

Атрибут data применяется к экземпляру класса FlaskForm и хранит словарь с данными полей формы после успешной валидации. Ключами словаря выступают имена полей, а значениями - значения, введённые пользователем. Атрибут доступен только после вызова метода validate_on_submit или validate, вернувших True. Удобно использовать data для передачи данных в базу или бизнес-логику без обращения к каждому полю по отдельности.

Синтаксис

form.data

Пример

Давайте создадим форму с полями name и email и выведем содержимое атрибута data после валидации:

from flask import Flask, render_template from flask_wtf import FlaskForm from wtforms import StringField, SubmitField from wtforms.validators import DataRequired app = Flask(__name__) app.config['SECRET_KEY'] = 'secret' class MyForm(FlaskForm): name = StringField('Name', validators=[DataRequired()]) email = StringField('Email', validators=[DataRequired()]) submit = SubmitField('Send') @app.route('/', methods=['GET', 'POST']) def index(): form = MyForm() res = None if form.validate_on_submit(): res = form.data return render_template('index.html', form=form, res=res)

Шаблон для отображения формы и результата:

<form method="post"> {{ form.hidden_tag() }} <p>{{ form.name.label }} {{ form.name() }}</p> <p>{{ form.email.label }} {{ form.email() }}</p> <p>{{ form.submit() }}</p> </form> {% if res %} <p>{{ res }}</p> {% endif %}

Результат выполнения кода после отправки формы со значениями 'abcde' и 'user':

{'name': 'abcde', 'email': 'user', 'submit': True, 'csrf_token': '...'}

Пример

Давайте распакуем словарь data и передадим значения в функцию сохранения:

from flask import Flask, render_template from flask_wtf import FlaskForm from wtforms import StringField, SubmitField from wtforms.validators import DataRequired app = Flask(__name__) app.config['SECRET_KEY'] = 'secret' class UserForm(FlaskForm): name = StringField('Name', validators=[DataRequired()]) submit = SubmitField('Send') def save_user(name): return f"saved: {name}" @app.route('/', methods=['GET', 'POST']) def index(): form = UserForm() msg = None if form.validate_on_submit(): msg = save_user(**form.data) return render_template('index.html', form=form, msg=msg)

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

<form method="post"> {{ form.hidden_tag() }} <p>{{ form.name.label }} {{ form.name() }}</p> <p>{{ form.submit() }}</p> </form> {% if msg %} <p>{{ msg }}</p> {% endif %}

Результат выполнения кода после отправки формы со значением 'abcde':

"saved: abcde"

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

  • класс FlaskForm,
    который представляет форму во Flask
  • метод validate_on_submit,
    который проверяет отправку и валидирует форму
  • атрибут errors,
    который хранит ошибки валидации полей
  • метод populate_obj,
    который переносит данные формы в объект
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить