Метод validate
Метод validate применяется к экземпляру класса
Form и запускает проверку всех валидаторов,
привязанных к полям формы. Метод не принимает
обязательных параметров и возвращает True,
если все поля прошли проверку, иначе False.
Результаты проверки сохраняются в атрибуте
errors, а очищенные данные - в атрибуте
data.
Синтаксис
form.validate()
Пример
Давайте создадим форму с обязательным полем
name и проверим её методом validate:
from flask import Flask, render_template, request
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 = form.validate()
if res:
return 'form is valid'
return render_template('index.html', form=form)
Шаблон для вывода формы:
<form method="post">
{{ form.hidden_tag() }}
<p>{{ form.name.label }} {{ form.name() }}</p>
<p>{{ form.submit() }}</p>
</form>
Результат выполнения кода при отправке пустой формы:
<form method="post">
<p>Name <input id="name" name="name" type="text" value=""></p>
<p><input id="submit" name="submit" type="submit" value="Send"></p>
</form>
Пример
Давайте проверим форму с валидатором
Length и выведем список ошибок через
атрибут errors:
from flask import Flask, render_template, request
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, max=10)
])
submit = SubmitField('Send')
@app.route('/', methods=['GET', 'POST'])
def index():
form = MyForm()
if form.validate():
return 'form is valid'
return render_template('index.html', form=form)
Шаблон для вывода ошибок:
<form method="post">
{{ form.hidden_tag() }}
<p>{{ form.name.label }} {{ form.name() }}</p>
{% for error in form.name.errors %}
<p>{{ error }}</p>
{% endfor %}
<p>{{ form.submit() }}</p>
</form>
Результат выполнения кода при вводе строки 'ab':
<form method="post">
<p>Name <input id="name" name="name" type="text" value="ab"></p>
<p>Field must be between 3 and 10 characters long.</p>
<p><input id="submit" name="submit" type="submit" value="Send"></p>
</form>
Смотрите также
-
класс
Form,
который является базовым классом для форм -
метод
validate_on_submit,
который проверяет форму только при POST-запросе -
атрибут
errors,
который хранит ошибки валидации полей -
атрибут
data,
который хранит очищенные данные формы