Валидатор validate_domain_name
Валидатор validate_domain_name применяется к полям форм Django для проверки, является ли переданное значение корректным доменным именем. Он проверяет, соответствует ли строка правилам DNS, включая допустимые символы, длину сегментов и общую длину домена. Валидатор используется по умолчанию в полях типа URLField и EmailField, но может быть применен и отдельно к любому текстовому полю.
Основные параметры валидатора: allow_unicode (разрешает использование Unicode-символов), message (кастомное сообщение об ошибке) и code (код ошибки). По умолчанию allow_unicode имеет значение False, что ограничивает домены только ASCII-символами.
Синтаксис
from django.core.validators import validate_domain_name
from django import forms
class MyForm(forms.Form):
domain = forms.CharField(validators=[validate_domain_name])
Пример
Создадим форму для ввода доменного имени и проверим ее работу с корректным значением:
from django.core.validators import validate_domain_name
from django import forms
class DomainForm(forms.Form):
domain = forms.CharField(
max_length=100,
validators=[validate_domain_name],
label="Domain name"
)
# Valid domain
form = DomainForm({'domain': 'example.com'})
if form.is_valid():
res = form.cleaned_data['domain']
print(res)
Результат выполнения кода:
"example.com"
Пример
Попробуем передать в форму некорректное доменное имя с недопустимым символом:
from django.core.validators import validate_domain_name
from django import forms
class DomainForm(forms.Form):
domain = forms.CharField(
max_length=100,
validators=[validate_domain_name],
label="Domain name"
)
# Invalid domain (underscore not allowed)
form = DomainForm({'domain': 'my_site.com'})
if not form.is_valid():
res = form.errors['domain']
print(res)
Результат выполнения кода:
"Enter a valid domain name."
Пример
Используем валидатор с поддержкой Unicode-символов для проверки доменов с национальными символами:
from django.core.validators import validate_domain_name
from django import forms
class UnicodeDomainForm(forms.Form):
domain = forms.CharField(
max_length=100,
validators=[validate_domain_name(allow_unicode=True)],
label="Domain name"
)
# Unicode domain (example with Russian characters)
form = UnicodeDomainForm({'domain': 'пример.рф'})
if form.is_valid():
res = form.cleaned_data['domain']
print(res)
Результат выполнения кода:
"пример.рф"
Пример
Добавим кастомное сообщение об ошибке для валидатора:
from django.core.validators import validate_domain_name
from django import forms
class CustomDomainForm(forms.Form):
domain = forms.CharField(
max_length=100,
validators=[
validate_domain_name(
message="Please enter a valid domain name"
)
],
label="Domain name"
)
# Invalid domain
form = CustomDomainForm({'domain': 'invalid domain'})
if not form.is_valid():
res = form.errors['domain']
print(res)
Результат выполнения кода:
"Please enter a valid domain name"
Смотрите также
-
валидатор
validate_email,
который проверяет корректность email-адреса -
валидатор
URLValidator,
который проверяет корректность URL-адресов -
валидатор
RegexValidator,
который выполняет проверку по регулярному выражению -
поле
URLField,
которое использует данный валидатор по умолчанию