Правило 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,
который представляет ошибку валидации