Метод validate_on_submit
Метод validate_on_submit применяется к экземпляру формы
FlaskForm внутри функции-обработчика. Он возвращает True,
если форма была отправлена методом POST и все её поля прошли
валидацию. Если форма не отправлена или содержит ошибки,
метод возвращает False. Параметров метод не принимает.
Синтаксис
form.validate_on_submit()
Пример
Давайте создадим форму с одним полем и проверим её
через validate_on_submit:
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()
if form.validate_on_submit():
res = form.name.data
else:
res = 'no data'
return render_template('index.html', form=form, res=res)
Шаблон для вывода формы:
<+jinja+>
{{ res }}
<-jinja+>Результат выполнения кода при пустой отправке:
"no data"
Пример
Давайте посмотрим, что произойдёт при корректно
заполненном поле name:
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()
if form.validate_on_submit():
res = 'hello, ' + form.name.data
else:
res = 'no data'
return render_template('index.html', form=form, res=res)
Результат выполнения кода при вводе значения 'user':
"hello, user"
Пример
Давайте проверим атрибут 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 = 'no data'
if form.validate_on_submit():
res = form.name.data
else:
res = form.errors
return render_template('index.html', form=form, res=res)
Результат выполнения кода при пустом поле:
{'name': ['This field is required.']}