Валидаторы¶
Написание валидаторов¶
Валидатор - это вызываемый объект, который принимает значение и выдает сообщение 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)[исходный код]¶
- Параметры: - EmailValidatorгарантирует, что значение выглядит как email, и вызывает- ValidationErrorс- messageи- code, если это не так. Значения длиной более 320 символов всегда считаются недопустимыми.- 
message¶
- Сообщение об ошибке, используемое - ValidationErrorпри неудачной валидации. По умолчанию имеет значение- "Enter a valid email address".
 - 
code¶
- Код ошибки, используемый - ValidationErrorпри неудачной валидации. По умолчанию- "invalid".
 - 
allowlist¶
- Список разрешенных почтовых доменов. По умолчанию регулярное выражение (атрибут - domain_regex) используется для проверки всего, что появляется после знака- @. Однако, если эта строка появляется в- allowlist, эта проверка обходится. Если атрибут не указан, по умолчанию- allowlistиспользуется- ['localhost']. Другие домены, не содержащие точку, не пройдут проверку, поэтому при необходимости их нужно добавить в- allowlist.
 Changed in Django 3.2.20:- В старых версиях допустимыми могли считаться значения длиной более 320 символов. 
- 
URLValidator¶
- 
class URLValidator(schemes=None, regex=None, message=None, code=None)[исходный код]¶
- Подкласс - RegexValidator, который гарантирует, что значение выглядит как URL, и выдает код ошибки- 'invalid', если это не так. Значения длиннее- max_lengthсимволов всегда считаются недопустимыми.- Loopback-адреса и зарезервированные IP-пространства считаются действительными. Поддерживаются буквенные IPv6-адреса (RFC 3986#section-3.2.2) и домены Unicode. - В дополнение к необязательным аргументам своего родительского класса - RegexValidator,- URLValidatorпринимает дополнительный необязательный атрибут:- 
schemes¶
- Список схем URL/URI для проверки. Если список не указан, по умолчанию используется - ['http', 'https', 'ftp', 'ftps']. В качестве справки, на сайте IANA приведен полный список valid URI schemes.- Предупреждение - Значения, начинающиеся с - file:///, не будут проходить проверку, даже если указана схема- file. Допустимые значения должны содержать хост.
 - 
max_length¶
- New in Django 3.2.20.Максимальная длина значений, которые могут считаться допустимыми. По умолчанию - 2048 символов. 
 Changed in Django 3.2.20:- В старых версиях допустимыми могли считаться значения длиной более 2048 символов. 
- 
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, offset=None)[исходный код]¶
- Вызывает ошибку - ValidationErrorс кодом- 'step_size', если- valueне является целым кратным- limit_value, которое может быть плавающей, целой или десятичной величиной или вызываемой переменной. Если установлено значение- offset, проверка происходит по отношению к- limit_valueплюс- offset. Например, для- StepValueValidator(3, offset=1.4)допустимые значения включают- 1.4,- 4.4,- 7.4,- 10.4и так далее.Changed in Django 5.0:- Был добавлен аргумент - offset.