Валидатор validate_email

Валидатор validate_email применяется к полям форм для проверки, что введенное значение является корректным email-адресом. Он проверяет формат адреса на соответствие стандартам RFC, включая наличие символа '@', доменной части и допустимых символов. Валидатор автоматически используется в поле EmailField, но может быть применен и к другим текстовым полям через аргумент validators. При обнаружении некорректного адреса валидатор выбрасывает исключение ValidationError с соответствующим сообщением.

Валидатор принимает необязательный параметр message, который позволяет переопределить стандартное сообщение об ошибке. Также можно передать параметр code для указания кода ошибки, что полезно при локализации или кастомизации обработки ошибок.

Синтаксис

pythonfrom django.core.validators import validate_email

validate_email(value)

С параметром message:

pythonfrom django.core.validators import validate_email

validate_email(value, message="Invalid email address")

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

Создадим форму с полем для email с использованием валидатора:

pythonfrom django import forms
from django.core.validators import validate_email

class ContactForm(forms.Form):
  name = forms.CharField(max_length=100)
  email = forms.CharField(
    max_length=254,
    validators=[validate_email]
  )
  message = forms.CharField(widget=forms.Textarea)

Пример . С кастомным сообщением

Переопределим стандартное сообщение об ошибке:

pythonfrom django import forms
from django.core.validators import validate_email

class SubscriptionForm(forms.Form):
  email = forms.CharField(
    max_length=254,
    validators=[
      validate_email(
        message="Пожалуйста, введите корректный email"
      )
    ]
  )

Пример . С проверкой в view

Используем валидатор напрямую в представлении:

pythonfrom django.core.validators import validate_email
from django.core.exceptions import ValidationError
from django.http import JsonResponse

def check_email(request):
  email = request.GET.get('email', '')
  
  try:
    validate_email(email)
    res = {"valid": True, "message": "Email is valid"}
  except ValidationError as e:
    res = {"valid": False, "message": str(e)}
    
  return JsonResponse(res)

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

python{"valid": true, "message": "Email is valid"}

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

python{"valid": false, "message": "Enter a valid email address."}

Пример . С моделью и ModelForm

Используем валидатор в модели и форме:

pythonfrom django.db import models
from django.core.validators import validate_email
from django import forms

class UserProfile(models.Model):
  username = models.CharField(max_length=50)
  email = models.EmailField(validators=[validate_email])
  created_at = models.DateTimeField(auto_now_add=True)
  
class UserProfileForm(forms.ModelForm):
  class Meta:
    model = UserProfile
    fields = ['username', 'email']
    
  def clean_email(self):
    email = self.cleaned_data['email']
    try:
      validate_email(email)
    except ValidationError as e:
      raise ValidationError("Invalid email format")
    return email

Пример . Обработка ошибок

Обработаем ошибки валидации при сохранении формы:

pythonfrom django.shortcuts import render
from django.core.exceptions import ValidationError
from django.core.validators import validate_email

def register_user(request):
  if request.method == 'POST':
    email = request.POST.get('email', '')
    try:
      validate_email(email)
      # Сохранение данных
      res = "User registered successfully"
    except ValidationError as e:
      res = f"Error: {e.message}"
      
  return render(request, 'register.html', {'result': res})

Результат выполнения кода при успешной валидации:

python"User registered successfully"

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

python"Error: Enter a valid email address."

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

  • класс EmailValidator,
    который предоставляет расширенную настройку валидации email
  • поле EmailField,
    которое автоматически использует валидатор email
  • валидатор URLValidator,
    который проверяет корректность URL-адресов
  • валидатор RegexValidator,
    который проверяет значение по регулярному выражению