Валидатор URLValidator
Валидатор URLValidator применяется для проверки
URL-адресов в полях форм Django. Он проверяет,
соответствует ли переданное значение формату URL,
включая правильный синтаксис и наличие обязательных
компонентов. Валидатор можно использовать как в
полях формы через параметр validators, так и
самостоятельно для валидации строк. Конструктор
принимает необязательные параметры для настройки
проверки.
Синтаксис
from django.core.validators import URLValidator
validator = URLValidator()
validator('https://example.com')
Параметры конструктора
-
message- текст сообщения об ошибке при невалидном URL -
code- код ошибки для идентификации типа ошибки валидации -
schemes- список разрешенных схем URL (по умолчанию ['http', 'https', 'ftp', 'ftps'])
Пример . Использование в форме
Определим форму с полем для ввода URL-адреса с применением валидатора:
from django import forms
from django.core.validators import URLValidator
class WebsiteForm(forms.Form):
website = forms.URLField(
validators=[URLValidator()]
)
Результат проверки формы с корректным URL:
form = WebsiteForm({'website': 'https://example.com'})
form.is_valid() # True
Пример . С кастомными схемами
Ограничим проверку только HTTPS-ссылками:
from django import forms
from django.core.validators import URLValidator
class SecureForm(forms.Form):
secure_url = forms.URLField(
validators=[URLValidator(schemes=['https'])]
)
Попробуем передать HTTP-ссылку в форму:
form = SecureForm({'secure_url': 'http://example.com'})
form.is_valid() # False
form.errors['secure_url']
Результат выполнения кода:
"Enter a valid URL."
Пример . Самостоятельное использование
Валидатор можно использовать вне формы для проверки строк:
from 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}')
Результат выполнения кода:
"URL is valid"
Пример . С пользовательским сообщением
Создадим валидатор с собственным текстом ошибки:
from 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:
form = CustomForm({'link': 'not_a_url'})
form.is_valid() # False
form.errors['link']
Результат выполнения кода:
"Please enter a correct web address"
Смотрите также
-
валидатор
EmailValidator,
который проверяет корректность email-адресов -
валидатор
RegexValidator,
который выполняет проверку по регулярному выражению -
валидатор
DomainNameValidator,
который проверяет доменные имена -
поле
URLField,
которое использует этот валидатор по умолчанию