РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
463 of 818 menu

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,
    которая является низкоуровневой функцией валидации доменов
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить