Валидаторы¶
Написание валидаторов¶
Валидатор - это вызываемый объект, который принимает значение и выдает сообщение ValidationError, если оно не соответствует некоторым критериям. Валидаторы могут быть полезны для повторного использования логики проверки между различными типами полей.
Например, вот валидатор, который допускает только четные числа:
from django.core.exceptions import ValidationError
from django.utils.translation import gettext_lazy as _
def validate_even(value):
    if value % 2 != 0:
        raise ValidationError(
            _('%(value)s is not an even number'),
            params={'value': value},
        )
Вы можете добавить это к полю модели через аргумент поля validators:
from django.db import models
class MyModel(models.Model):
    even_field = models.IntegerField(validators=[validate_even])
Поскольку значения преобразуются в Python до запуска валидаторов, вы можете использовать один и тот же валидатор даже с формами:
from django import forms
class MyForm(forms.Form):
    even_field = forms.IntegerField(validators=[validate_even])
Вы также можете использовать класс с методом __call__() для более сложных или настраиваемых валидаторов. Например, RegexValidator использует эту технику. Если в опции поля модели validators используется валидатор на основе класса, необходимо убедиться, что он serializable by the migration framework, добавив методы deconstruct() и __eq__().
Как работают валидаторы¶
Смотрите form validation для получения дополнительной информации о том, как запускаются валидаторы в формах, и Validating objects для того, как они запускаются в моделях. Обратите внимание, что валидаторы не будут запускаться автоматически при сохранении модели, но если вы используете ModelForm, он будет запускать ваши валидаторы на всех полях, включенных в вашу форму. См. ModelForm documentation для получения информации о том, как валидация модели взаимодействует с формами.
Встроенные валидаторы¶
Модуль django.core.validators содержит коллекцию вызываемых валидаторов для использования с полями моделей и форм. Они используются внутри модуля, но доступны и для использования с вашими собственными полями. Их можно использовать в дополнение или вместо пользовательских методов field.clean().
RegexValidator¶
- 
class 
RegexValidator(regex=None, message=None, code=None, inverse_match=None, flags=0)[исходный код]¶ Параметры: - regex – Если не 
None, переопределяетregex. Может быть строкой регулярного выражения или предварительно скомпилированным регулярным выражением. - message – Если не 
None, переопределяетmessage. - code – Если не 
None, переопределяетcode. - inverse_match – Если не 
None, переопределяетinverse_match. - flags – Если не 
None, переопределяетсяflags. В этом случаеregexдолжно быть строкой регулярного выражения, иначе возникаетTypeError. 
RegexValidatorищет в предоставленномvalueзаданное регулярное выражение сre.search(). По умолчанию выдаетValidationErrorсmessageиcode, если совпадение не найдено. Его поведение можно изменить, установивinverse_matchвTrue, в этом случаеValidationErrorбудет вызвано, когда совпадение найдено.- 
regex¶ Шаблон регулярного выражения для поиска в пределах предоставленного
value, используяre.search(). Это может быть строка или предварительно скомпилированное регулярное выражение, созданное с помощьюre.compile(). По умолчанию используется пустая строка, которая будет найдена во всех возможныхvalue.
- 
message¶ Сообщение об ошибке, используемое
ValidationErrorпри неудачной валидации. По умолчанию имеет значение"Enter a valid value".
- 
code¶ Код ошибки, используемый
ValidationErrorпри неудачной валидации. По умолчанию"invalid".
- regex – Если не 
 
EmailValidator¶
- 
class 
EmailValidator(message=None, code=None, allowlist=None)[исходный код]¶ Параметры: - 
message¶ Сообщение об ошибке, используемое
ValidationErrorпри неудачной валидации. По умолчанию имеет значение"Enter a valid email address".
- 
code¶ Код ошибки, используемый
ValidationErrorпри неудачной валидации. По умолчанию"invalid".
- 
allowlist¶ Список разрешенных почтовых доменов. По умолчанию регулярное выражение (атрибут
domain_regex) используется для проверки всего, что появляется после знака@. Однако, если эта строка появляется вallowlist, эта проверка обходится. Если атрибут не указан, по умолчаниюallowlistиспользуется['localhost']. Другие домены, не содержащие точку, не пройдут проверку, поэтому при необходимости их нужно добавить вallowlist.
- 
 
URLValidator¶
- 
class 
URLValidator(schemes=None, regex=None, message=None, code=None)[исходный код]¶ Подкласс
RegexValidator, который гарантирует, что значение выглядит как URL, и выдает код ошибки'invalid', если это не так.Loopback-адреса и зарезервированные IP-пространства считаются действительными. Поддерживаются буквенные IPv6-адреса (RFC 3986#section-3.2.2) и домены Unicode.
В дополнение к необязательным аргументам своего родительского класса
RegexValidator,URLValidatorпринимает дополнительный необязательный атрибут:- 
schemes¶ Список схем URL/URI для проверки. Если список не указан, по умолчанию используется
['http', 'https', 'ftp', 'ftps']. В качестве справки, на сайте IANA приведен полный список valid URI schemes.
- 
 
validate_email¶
- 
validate_email¶ Экземпляр
EmailValidatorбез каких-либо настроек.
validate_slug¶
- 
validate_slug¶ Экземпляр
RegexValidator, который гарантирует, что значение состоит только из букв, цифр, подчеркивания или дефиса.
validate_unicode_slug¶
- 
validate_unicode_slug¶ Экземпляр
RegexValidator, который гарантирует, что значение состоит только из букв Юникода, цифр, подчеркиваний или дефисов.
validate_ipv4_address¶
- 
validate_ipv4_address[исходный код]¶ Экземпляр
RegexValidator, который гарантирует, что значение выглядит как IPv4-адрес.
validate_ipv6_address¶
- 
validate_ipv6_address[исходный код]¶ Использует
django.utils.ipv6для проверки достоверности IPv6-адреса.
validate_ipv46_address¶
- 
validate_ipv46_address[исходный код]¶ Использует
validate_ipv4_addressиvalidate_ipv6_address, чтобы убедиться, что значение является действительным IPv4 или IPv6 адресом.
validate_comma_separated_integer_list¶
- 
validate_comma_separated_integer_list¶ Экземпляр
RegexValidator, который гарантирует, что значение представляет собой список целых чисел, разделенных запятой.
int_list_validator¶
- 
int_list_validator(sep=',', message=None, code='invalid', allow_negative=False)[исходный код]¶ Возвращает экземпляр
RegexValidator, который гарантирует, что строка состоит из целых чисел, разделенныхsep. Он допускает отрицательные целые числа, когдаallow_negativeравноTrue.
MaxValueValidator¶
- 
class 
MaxValueValidator(limit_value, message=None)[исходный код]¶ Вызывает
ValidationErrorс кодом'max_value', еслиvalueбольшеlimit_value, который может быть вызываемым.
MinValueValidator¶
- 
class 
MinValueValidator(limit_value, message=None)[исходный код]¶ Вызывает
ValidationErrorс кодом'min_value', еслиvalueменьшеlimit_value, который может быть вызываемым.
MaxLengthValidator¶
- 
class 
MaxLengthValidator(limit_value, message=None)[исходный код]¶ Вызывает
ValidationErrorс кодом'max_length', если длинаvalueбольшеlimit_value, который может быть вызываемым.
MinLengthValidator¶
- 
class 
MinLengthValidator(limit_value, message=None)[исходный код]¶ Вызывает
ValidationErrorс кодом'min_length', если длинаvalueменьшеlimit_value, который может быть вызываемым.
DecimalValidator¶
- 
class 
DecimalValidator(max_digits, decimal_places)[исходный код]¶ Вызывает
ValidationErrorсо следующими кодами:'max_digits', если количество цифр большеmax_digits.'max_decimal_places'если количество десятичных знаков большеdecimal_places.'max_whole_digits', если количество целых цифр больше, чем разница междуmax_digitsиdecimal_places.
FileExtensionValidator¶
- 
class 
FileExtensionValidator(allowed_extensions, message, code)[исходный код]¶ Вызывает ошибку
ValidationErrorс кодом'invalid_extension', если расширениеvalue.name(valueявляетсяFile) не найдено вallowed_extensions. Расширение сравнивается регистронезависимо сallowed_extensions.Предупреждение
Не полагайтесь на проверку расширения файла для определения его типа. Файлы могут быть переименованы и иметь любое расширение, независимо от того, какие данные они содержат.
validate_image_file_extension¶
- 
validate_image_file_extension[исходный код]¶ Использует Pillow, чтобы убедиться, что
value.name(valueявляетсяFile) имеет a valid image extension.
ProhibitNullCharactersValidator¶
- 
class 
ProhibitNullCharactersValidator(message=None, code=None)[исходный код]¶ Вызывает ошибку
ValidationError, еслиstr(value)содержит один или более символов нуля ('\x00').Параметры: - 
message¶ Сообщение об ошибке, используемое
ValidationErrorпри неудачной валидации. По умолчанию имеет значение"Null characters are not allowed.".
- 
code¶ Код ошибки, используемый
ValidationErrorпри неудачной валидации. По умолчанию"null_characters_not_allowed".
- 
 
StepValueValidator¶
- 
class 
StepValueValidator(limit_value, message=None)[исходный код]¶ Вызывает ошибку
ValidationErrorс кодом'step_size', еслиvalueне является целым кратнымlimit_value, которое может быть плавающим, целым или десятичным значением или вызываемой переменной.