Валидаторы¶
Написание валидаторов¶
A validator is a callable that takes a value and raises a
ValidationError if it doesn’t meet some
criteria. Validators can be useful for reusing validation logic between
different types of fields.
Например, вот валидатор, который допускает только четные числа:
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)¶ Raises a
ValidationErrorwith a code of'step_size'ifvalueis not an integral multiple oflimit_value, which can be a float, integer or decimal value or a callable.