EmailValidator

Валидатор EmailValidator применяется к полям форм и моделей Django для проверки правильности формата email адресов. Он проверяет, что введенное значение соответствует стандартному формату электронной почты, включая наличие символа '@' и допустимого доменного имени. Валидатор может принимать параметры для настройки правил проверки.

Синтаксис

pythonfrom django.core.validators import EmailValidator

validator = EmailValidator(message=None, code=None, whitelist=None)

Пример . Использование в форме

Давайте создадим форму с полем email, использующую валидатор EmailValidator:

pythonfrom 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())

Результат выполнения кода:

python"True"

Пример

Проверим, как валидатор реагирует на некорректный email адрес:

pythonfrom 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'))

Результат выполнения кода:

python"False"
"Enter a valid email address."

Настройка сообщения об ошибке

Можно переопределить стандартное сообщение об ошибке через параметр message:

pythonfrom 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'))

Результат выполнения кода:

python"False"
"Пожалуйста, введите корректный email адрес"

Использование с моделью

Валидатор также можно использовать в моделях Django:

pythonfrom 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')

Результат выполнения кода:

python"Valid"

Допустимые домены верхнего уровня

Валидатор проверяет наличие точки в домене и корректность структуры:

pythonfrom 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()}')

Результат выполнения кода:

python"user@domain.com: True"
"user.name@domain.co.uk: True"
"user@domain: False"
"user@.com: False"

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

  • валидатор URLValidator,
    который проверяет корректность URL адресов
  • валидатор RegexValidator,
    который выполняет проверку по регулярному выражению
  • валидатор DomainNameValidator,
    который проверяет корректность доменных имен
  • функция validate_email,
    которая является низкоуровневой оберткой валидатора