Атрибут errors
Атрибут errors применяется к экземпляру формы
FlaskForm и содержит ошибки, возникшие при валидации.
Это словарь, ключами которого выступают имена полей
формы, а значениями - списки строк с текстами ошибок.
Если поле прошло валидацию, оно отсутствует в словаре.
Атрибут заполняется после вызова метода validate
или validate_on_submit.
Синтаксис
form.errors
Пример
Давайте создадим форму с полем name и валидатором
DataRequired, а затем выведем содержимое атрибута
errors при пустом значении:
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'] = 'abcde'
class MyForm(FlaskForm):
name = StringField('Name', validators=[DataRequired()])
submit = SubmitField('Send')
@app.route('/', methods=['GET', 'POST'])
def index():
form = MyForm()
res = None
if form.validate_on_submit():
res = 'success'
else:
res = form.errors
return render_template('index.html', form=form, res=res)
Шаблон для вывода результата:
<form method="post">
{{ form.hidden_tag() }}
<p>{{ form.name.label }} {{ form.name() }}</p>
<p>{{ form.submit() }}</p>
</form>
<p>{{ res }}</p>
Результат выполнения кода при отправке пустой формы:
{'name': ['This field is required.']}
Пример
Давайте переберём ошибки по полям и выведем каждое сообщение отдельно в шаблоне:
from flask import Flask, render_template
from flask_wtf import FlaskForm
from wtforms import StringField, SubmitField
from wtforms.validators import DataRequired, Length
app = Flask(__name__)
app.config['SECRET_KEY'] = 'abcde'
class MyForm(FlaskForm):
name = StringField('Name', validators=[DataRequired(), Length(min=3)])
submit = SubmitField('Send')
@app.route('/', methods=['GET', 'POST'])
def index():
form = MyForm()
if form.validate_on_submit():
res = 'success'
else:
res = form.errors
return render_template('index.html', form=form, res=res)
Шаблон с перебором ошибок:
<form method="post">
{{ form.hidden_tag() }}
<p>{{ form.name.label }} {{ form.name() }}</p>
{% for field, messages in res.items() %}
{% for message in messages %}
<p>{{ field }}: {{ message }}</p>
{% endfor %}
{% endfor %}
<p>{{ form.submit() }}</p>
</form>
Результат выполнения кода при отправке значения 'ab':
<p>name: Field must be at least 3 characters long.</p>
Смотрите также
-
класс
FlaskForm,
который является базовым классом для форм -
метод
validate_on_submit,
который проверяет форму при отправке -
метод
validate,
который запускает валидацию формы -
атрибут
data,
который хранит значения полей формы