Правило InputRequired
Правило InputRequired применяется к полю формы
и проверяет, что в этом поле были введены данные.
Если поле пустое, валидация завершается ошибкой.
В отличие от правила DataRequired, правило
InputRequired смотрит именно на сырые данные,
пришедшие из формы, а не на значение после приведения
типа. Это важно для числовых полей: значение 0
считается введённым, хотя при приведении типа может
стать ложным.
Правило принимает один необязательный параметр -
текст сообщения об ошибке message. Если его
не передать, используется стандартное сообщение
'This field is required.'.
Синтаксис
InputRequired(message=None)
Пример
Давайте создадим простую форму с полем для имени
и правилом InputRequired:
from flask import Flask, render_template
from flask_wtf import FlaskForm
from wtforms import StringField, SubmitField
from wtforms.validators import InputRequired
app = Flask(__name__)
app.config['SECRET_KEY'] = 'abcde'
class UserForm(FlaskForm):
name = StringField('Name', validators=[InputRequired()])
submit = SubmitField('Send')
@app.route('/', methods=['GET', 'POST'])
def index():
res = None
form = UserForm()
if form.validate_on_submit():
res = form.name.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.submit() }}</p>
</form>
{% if res %}
<p>{{ res }}</p>
{% endif %}
Если отправить форму с пустым полем, валидация
не пройдёт. Если ввести 'abcde', на странице
появится результат:
abcde
Пример
Давайте передадим собственное сообщение об ошибке:
from flask import Flask, render_template
from flask_wtf import FlaskForm
from wtforms import StringField, SubmitField
from wtforms.validators import InputRequired
app = Flask(__name__)
app.config['SECRET_KEY'] = 'abcde'
class UserForm(FlaskForm):
name = StringField('Name', validators=[
InputRequired(message='Enter your name')
])
submit = SubmitField('Send')
@app.route('/', methods=['GET', 'POST'])
def index():
form = UserForm()
if form.validate_on_submit():
return form.name.data
return render_template('index.html', form=form)
Теперь при пустом поле в атрибуте form.name.errors
будет лежать список:
['Enter your name']
Пример
Давайте сравним поведение InputRequired
и DataRequired на числовом поле:
from flask import Flask, render_template
from flask_wtf import FlaskForm
from wtforms import IntegerField, SubmitField
from wtforms.validators import InputRequired, DataRequired
app = Flask(__name__)
app.config['SECRET_KEY'] = 'abcde'
class NumberForm(FlaskForm):
num1 = IntegerField('Num1', validators=[InputRequired()])
num2 = IntegerField('Num2', validators=[DataRequired()])
submit = SubmitField('Send')
@app.route('/', methods=['GET', 'POST'])
def index():
form = NumberForm()
form.validate_on_submit()
return render_template('index.html', form=form)
Если ввести в оба поля значение 0, то поле
num1 пройдёт валидацию, а поле num2 -
нет, так как DataRequired отбрасывает значения,
которые приводятся к ложным. Атрибут form.num2.errors
будет содержать:
['This field is required.']
Смотрите также
-
правило
DataRequired,
которое проверяет значение после приведения типа -
правило
Optional,
которое разрешает пропустить поле -
класс
Form,
который описывает форму целиком -
атрибут
errors,
который хранит ошибки валидации поля