Валидатор URLValidator

Валидатор URLValidator применяется для проверки URL-адресов в полях форм Django. Он проверяет, соответствует ли переданное значение формату URL, включая правильный синтаксис и наличие обязательных компонентов. Валидатор можно использовать как в полях формы через параметр validators, так и самостоятельно для валидации строк. Конструктор принимает необязательные параметры для настройки проверки.

Синтаксис

pythonfrom django.core.validators import URLValidator

validator = URLValidator()
validator('https://example.com')

Параметры конструктора

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

Определим форму с полем для ввода URL-адреса с применением валидатора:

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

class WebsiteForm(forms.Form):
  website = forms.URLField(
    validators=[URLValidator()]
  )

Результат проверки формы с корректным URL:

pythonform = WebsiteForm({'website': 'https://example.com'})
form.is_valid()  # True

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

Ограничим проверку только HTTPS-ссылками:

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

class SecureForm(forms.Form):
  secure_url = forms.URLField(
    validators=[URLValidator(schemes=['https'])]
  )

Попробуем передать HTTP-ссылку в форму:

pythonform = SecureForm({'secure_url': 'http://example.com'})
form.is_valid()  # False
form.errors['secure_url']

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

python"Enter a valid URL."

Пример . Самостоятельное использование

Валидатор можно использовать вне формы для проверки строк:

pythonfrom django.core.validators import URLValidator
from django.core.exceptions import ValidationError

validator = URLValidator()
url = 'https://djangoproject.com'

try:
  validator(url)
  print('URL is valid')
except ValidationError as e:
  print(f'Invalid URL: {e}')

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

python"URL is valid"

Пример . С пользовательским сообщением

Создадим валидатор с собственным текстом ошибки:

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

class CustomForm(forms.Form):
  link = forms.URLField(
    validators=[
      URLValidator(
        message='Please enter a correct web address'
      )
    ]
  )

При попытке отправить невалидный URL:

pythonform = CustomForm({'link': 'not_a_url'})
form.is_valid()  # False
form.errors['link']

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

python"Please enter a correct web address"

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

  • валидатор EmailValidator,
    который проверяет корректность email-адресов
  • валидатор RegexValidator,
    который выполняет проверку по регулярному выражению
  • валидатор DomainNameValidator,
    который проверяет доменные имена
  • поле URLField,
    которое использует этот валидатор по умолчанию