РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
296 of 643 menu

Правило 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,
    который хранит ошибки валидации поля
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить