EmailValidator
Валидатор EmailValidator применяется к полям форм и моделей Django для проверки правильности формата email адресов. Он проверяет, что введенное значение соответствует стандартному формату электронной почты, включая наличие символа '@' и допустимого доменного имени. Валидатор может принимать параметры для настройки правил проверки.
Синтаксис
from django.core.validators import EmailValidator
validator = EmailValidator(message=None, code=None, whitelist=None)
Пример . Использование в форме
Давайте создадим форму с полем email, использующую валидатор EmailValidator:
from django import forms
from django.core.validators import EmailValidator
class ContactForm(forms.Form):
name = forms.CharField(max_length=100)
email = forms.EmailField(validators=[EmailValidator()])
message = forms.CharField(widget=forms.Textarea)
# Проверка валидного email
form = ContactForm({
'name': 'John Doe',
'email': 'john@example.com',
'message': 'Hello world!'
})
print(form.is_valid())
Результат выполнения кода:
"True"
Пример
Проверим, как валидатор реагирует на некорректный email адрес:
from django import forms
from django.core.validators import EmailValidator
class ContactForm(forms.Form):
email = forms.EmailField(validators=[EmailValidator()])
# Проверка невалидного email
form = ContactForm({
'email': 'invalid-email'
})
print(form.is_valid())
print(form.errors.get('email'))
Результат выполнения кода:
"False"
"Enter a valid email address."
Настройка сообщения об ошибке
Можно переопределить стандартное сообщение об ошибке через параметр message:
from django import forms
from django.core.validators import EmailValidator
custom_validator = EmailValidator(
message='Пожалуйста, введите корректный email адрес'
)
class RegistrationForm(forms.Form):
email = forms.EmailField(validators=[custom_validator])
form = RegistrationForm({'email': 'bad-email'})
print(form.is_valid())
print(form.errors.get('email'))
Результат выполнения кода:
"False"
"Пожалуйста, введите корректный email адрес"
Использование с моделью
Валидатор также можно использовать в моделях Django:
from django.db import models
from django.core.validators import EmailValidator
class UserProfile(models.Model):
username = models.CharField(max_length=50)
email = models.EmailField(
max_length=254,
validators=[EmailValidator()]
)
# Создание объекта с валидным email
profile = UserProfile(
username='alex',
email='alex@example.com'
)
profile.full_clean()
print('Valid')
Результат выполнения кода:
"Valid"
Допустимые домены верхнего уровня
Валидатор проверяет наличие точки в домене и корректность структуры:
from django import forms
from django.core.validators import EmailValidator
class TestForm(forms.Form):
email = forms.EmailField(validators=[EmailValidator()])
# Проверка разных вариантов email
emails = [
'user@domain.com',
'user.name@domain.co.uk',
'user@domain',
'user@.com'
]
for email in emails:
form = TestForm({'email': email})
print(f'{email}: {form.is_valid()}')
Результат выполнения кода:
"user@domain.com: True"
"user.name@domain.co.uk: True"
"user@domain: False"
"user@.com: False"
Смотрите также
-
валидатор
URLValidator,
который проверяет корректность URL адресов -
валидатор
RegexValidator,
который выполняет проверку по регулярному выражению -
валидатор
DomainNameValidator,
который проверяет корректность доменных имен -
функция
validate_email,
которая является низкоуровневой оберткой валидатора