Правило Email
Правило Email применяется к полю формы
WTForms и проверяет, что введённое значение
является корректным адресом электронной почты.
Если значение не соответствует формату email,
валидация завершается ошибкой, а в атрибуте
errors поля появляется сообщение об ошибке.
Правило принимает необязательный параметр
message, в котором можно задать
собственный текст ошибки.
Синтаксис
from wtforms.validators import Email
Email(message=None)
Пример
Давайте создадим форму с полем email
и навесим на него правило Email:
from flask import Flask, render_template, request
from flask_wtf import FlaskForm
from wtforms import StringField, SubmitField
from wtforms.validators import Email
app = Flask(__name__)
app.config['SECRET_KEY'] = 'secret'
class MyForm(FlaskForm):
email = StringField('Email', validators=[Email()])
submit = SubmitField('Send')
@app.route('/', methods=['GET', 'POST'])
def index():
form = MyForm()
res = None
if form.validate_on_submit():
res = form.email.data
return render_template('index.html', form=form, res=res)
Шаблон для вывода формы:
<form method="post">
{{ form.hidden_tag() }}
<p>{{ form.email.label }} {{ form.email }}</p>
<p>{{ form.submit }}</p>
</form>
{% if res %}
<p>{{ res }}</p>
{% endif %}
Если ввести корректный адрес, например
'user@example.com', форма успешно
пройдёт валидацию, и результат выполнения
кода будет таким:
user@example.com
Пример
Давайте посмотрим, какие ошибки появятся, если ввести некорректный адрес:
from flask import Flask, render_template
from flask_wtf import FlaskForm
from wtforms import StringField, SubmitField
from wtforms.validators import Email
app = Flask(__name__)
app.config['SECRET_KEY'] = 'secret'
class MyForm(FlaskForm):
email = StringField('Email', validators=[Email()])
submit = SubmitField('Send')
@app.route('/', methods=['GET', 'POST'])
def index():
form = MyForm()
if form.validate_on_submit():
pass
return render_template('index.html', form=form)
Шаблон с выводом ошибок поля:
<form method="post">
{{ form.hidden_tag() }}
<p>{{ form.email.label }} {{ form.email }}</p>
{% for error in form.email.errors %}
<p>{{ error }}</p>
{% endfor %}
<p>{{ form.submit }}</p>
</form>
Если ввести значение 'abcde', валидация
не пройдёт, и в списке ошибок появится
стандартное сообщение:
['Invalid email address.']
Пример
Давайте зададим собственное сообщение
об ошибке через параметр message:
from flask import Flask, render_template
from flask_wtf import FlaskForm
from wtforms import StringField, SubmitField
from wtforms.validators import Email
app = Flask(__name__)
app.config['SECRET_KEY'] = 'secret'
class MyForm(FlaskForm):
email = StringField(
'Email',
validators=[Email(message='Wrong email')]
)
submit = SubmitField('Send')
@app.route('/', methods=['GET', 'POST'])
def index():
form = MyForm()
if form.validate_on_submit():
pass
return render_template('index.html', form=form)
Если ввести значение 'abcde', в списке
ошибок появится наш текст:
['Wrong email']
Смотрите также
-
класс
Form,
который является базой для форм WTForms -
поле
EmailField,
которое создаёт поле ввода email -
поле
StringField,
которое создаёт обычное строковое поле -
правило
DataRequired,
которое проверяет, что поле не пустое