Атрибут 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,
который переносит данные формы в объект