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

Правило NoneOf

Правило NoneOf применяется к полю формы и проверяет, что значение поля не совпадает ни с одним из элементов переданного списка. Первым параметром передаётся список запрещённых значений. Если значение поля входит в этот список, валидация завершается ошибкой ValidationError. Правило удобно использовать, например, для запрета зарезервированных имён.

Синтаксис

NoneOf(values, [message])

Пример

Давайте создадим форму с полем username и запретим вводить имена 'admin', 'root' и 'user':

from flask import Flask, render_template from flask_wtf import FlaskForm from wtforms import StringField, SubmitField from wtforms.validators import NoneOf app = Flask(__name__) app.config['SECRET_KEY'] = 'abcde' class UserForm(FlaskForm): username = StringField('Username', validators=[NoneOf(['admin', 'root', 'user'])]) submit = SubmitField('Send') @app.route('/', methods=['GET', 'POST']) def index(): form = UserForm() if form.validate_on_submit(): return 'form accepted' return render_template('index.html', form=form)

Вот шаблон для этой формы:

<form method="post"> {{ form.csrf_token }} <p>{{ form.username.label }} {{ form.username }}</p> <p>{{ form.submit }}</p> </form>

Пример

Если пользователь введёт значение из запрещённого списка, например 'admin', форма не пройдёт валидацию, и в атрибуте errors появится сообщение об ошибке:

{'username': ['Invalid input.']}

Если же пользователь введёт значение, которого нет в списке, например 'abcde', валидация пройдёт успешно:

"form accepted"

Пример

Давайте зададим собственное сообщение об ошибке вторым параметром правила:

from flask import Flask, render_template from flask_wtf import FlaskForm from wtforms import StringField, SubmitField from wtforms.validators import NoneOf app = Flask(__name__) app.config['SECRET_KEY'] = 'abcde' class UserForm(FlaskForm): username = StringField( 'Username', validators=[NoneOf(['admin', 'root', 'user'], message='This name is not allowed')] ) submit = SubmitField('Send') @app.route('/', methods=['GET', 'POST']) def index(): form = UserForm() if form.validate_on_submit(): return 'form accepted' return render_template('index.html', form=form)

Теперь при вводе запрещённого имени в атрибуте errors будет наше сообщение:

{'username': ['This name is not allowed']}

Смотрите также

  • правило AnyOf,
    которое проверяет вхождение значения в список
  • правило DataRequired,
    которое проверяет, что поле не пустое
  • правило Regexp,
    которое проверяет значение по регулярному выражению
  • класс ValidationError,
    который представляет ошибку валидации
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить