Валидатор validate_email
Валидатор validate_email применяется к полям форм для проверки,
что введенное значение является корректным email-адресом. Он проверяет
формат адреса на соответствие стандартам RFC, включая наличие символа
'@', доменной части и допустимых символов. Валидатор автоматически
используется в поле EmailField, но может быть применен и к другим
текстовым полям через аргумент validators. При обнаружении
некорректного адреса валидатор выбрасывает исключение
ValidationError с соответствующим сообщением.
Валидатор принимает необязательный параметр message, который
позволяет переопределить стандартное сообщение об ошибке. Также можно
передать параметр code для указания кода ошибки, что полезно
при локализации или кастомизации обработки ошибок.
Синтаксис
from django.core.validators import validate_email
validate_email(value)
С параметром message:
from django.core.validators import validate_email
validate_email(value, message="Invalid email address")
Пример . Использование в форме
Создадим форму с полем для email с использованием валидатора:
from 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)
Пример . С кастомным сообщением
Переопределим стандартное сообщение об ошибке:
from 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
Используем валидатор напрямую в представлении:
from 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:
{"valid": true, "message": "Email is valid"}
Результат выполнения кода при некорректном email:
{"valid": false, "message": "Enter a valid email address."}
Пример . С моделью и ModelForm
Используем валидатор в модели и форме:
from 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
Пример . Обработка ошибок
Обработаем ошибки валидации при сохранении формы:
from 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})
Результат выполнения кода при успешной валидации:
"User registered successfully"
Результат выполнения кода при ошибке валидации:
"Error: Enter a valid email address."
Смотрите также
-
класс
EmailValidator,
который предоставляет расширенную настройку валидации email -
поле
EmailField,
которое автоматически использует валидатор email -
валидатор
URLValidator,
который проверяет корректность URL-адресов -
валидатор
RegexValidator,
который проверяет значение по регулярному выражению