DomainNameValidator
Валидатор DomainNameValidator применяется к полям форм Django для проверки корректности доменных имен. Валидатор проверяет, что строка соответствует правилам DNS - состоит из допустимых символов, содержит точки между уровнями домена и имеет корректную структуру. Он позволяет указать список разрешенных доменных зон и настроить строгость проверки.
Синтаксис
from django.core.validators import DomainNameValidator
DomainNameValidator(
message="Введите корректное доменное имя",
code="invalid",
allowed_tlds=["com", "org", "ru", "net"],
allow_unicode=False
)
Параметры
Валидатор принимает следующие параметры:
-
message- сообщение об ошибке при невалидном значении (по умолчанию "Enter a valid domain name") -
code- код ошибки для идентификации (по умолчанию "invalid") -
allowed_tlds- список разрешенных доменных зон (например, ["com", "org", "ru"]) -
allow_unicode- разрешить использование символов Unicode в доменных именах (по умолчанию False)
Пример . Использование в форме
Создадим форму с полем для ввода доменного имени и применим валидатор:
from django import forms
from django.core.validators import DomainNameValidator
class DomainForm(forms.Form):
domain = forms.CharField(
max_length=100,
validators=[
DomainNameValidator(
message="Введите корректное доменное имя",
allowed_tlds=["com", "org", "ru", "net"]
)
],
help_text="Введите домен без http://"
)
Пример . С проверкой на Unicode
Разрешим использование Unicode-символов в доменных именах:
from django import forms
from django.core.validators import DomainNameValidator
class UnicodeDomainForm(forms.Form):
domain = forms.CharField(
max_length=100,
validators=[
DomainNameValidator(
allow_unicode=True,
message="Доменное имя содержит недопустимые символы"
)
]
)
Валидация данных в представлении
Используем форму с валидатором в представлении для проверки введенного домена:
from django.shortcuts import render
from .forms import DomainForm
def check_domain(request):
res = None
if request.method == "POST":
form = DomainForm(request.POST)
if form.is_valid():
domain = form.cleaned_data["domain"]
res = f"Домен {domain} прошел валидацию"
else:
form = DomainForm()
return render(request, "domain.html", {"form": form, "result": res})
Пример . С ошибкой валидации
Попробуем передать невалидное доменное имя:
from django.core.validators import DomainNameValidator
from django.core.exceptions import ValidationError
validator = DomainNameValidator(allowed_tlds=["com", "org"])
try:
validator("invalid domain")
except ValidationError as e:
print(e.message)
Результат выполнения кода:
"Enter a valid domain name"
Валидация списка доменов
Создадим поле, которое принимает несколько доменов через запятую, и применим валидатор к каждому:
from django import forms
from django.core.validators import DomainNameValidator, validate_comma_separated_integer_list
class MultipleDomainForm(forms.Form):
domains = forms.CharField(
max_length=500,
validators=[
validate_comma_separated_integer_list # Замените на свою валидацию списка
],
help_text="Введите домены через запятую"
)
def clean_domains(self):
data = self.cleaned_data["domains"]
validator = DomainNameValidator()
domains = [d.strip() for d in data.split(",")]
for domain in domains:
validator(domain)
return data
Смотрите также
-
валидатор
URLValidator,
который проверяет корректность URL-адресов -
валидатор
EmailValidator,
который проверяет корректность email-адресов -
валидатор
RegexValidator,
который проверяет значение с помощью регулярного выражения -
функция
validate_domain_name,
которая является низкоуровневой функцией валидации доменов