Валидаторы
Написание валидаторов
Валидатор — это вызываемый объект, который принимает значение и вызывает исключение 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, убедитесь, что он сериализуется системой миграций, добавив методы deconstruct() и __eq__().
Как выполняются валидаторы
Дополнительную информацию о том, как выполняются валидаторы в формах, см. в разделе валидации форм, а о том, как они выполняются в моделях, см. в разделе валидации объектов. Обратите внимание, что валидаторы не будут выполняться автоматически при сохранении модели, но если вы используете ModelForm, он запустит ваши валидаторы для всех полей, включённых в вашу форму. Дополнительную информацию о взаимодействии валидации модели с формами см. в документации по ModelForm.
Встроенные валидаторы
Модуль django.core.validators содержит набор вызываемых валидаторов для использования с полями модели и формы. Они используются внутри, но также доступны для использования с вашими собственными полями. Их можно использовать дополнительно или вместо пользовательских field.clean() методов.
RegexValidator
-
class RegexValidator(regex=None, message=None, code=None, inverse_match=None, flags=0)[source] -
Параметры: -
regex – Если не
None, переопределяетregex. Может быть строкой регулярного выражения или предварительно скомпилированным регулярным выражением. -
message – Если не
None, переопределяетmessage. -
code – Если не
None, переопределяетcode. -
inverse_match – Если не
None, переопределяетinverse_match. -
flags – Если не
None, переопределяетflags. В этом случаеregexдолжен быть строкой регулярного выражения, иначе возникаетTypeError.
-
regex -
Шаблон регулярного выражения для поиска в указанном
value, или предварительно скомпилированное регулярное выражение. По умолчанию, если совпадение не найдено, генерируетсяValidationErrorсmessageиcode. Это стандартное поведение можно изменить, установивinverse_matchвTrue, в этом случаеValidationErrorгенерируется, когда совпадение находится. По умолчанию соответствует любой строке (включая пустую строку).
-
message -
Сообщение об ошибке, используемое в
ValidationErrorпри неудачной валидации. По умолчанию"Enter a valid value".
-
code -
Код ошибки, используемый в
ValidationErrorпри неудачной валидации. По умолчанию"invalid".
-
inverse_match -
Режим сопоставления для
regex. По умолчаниюFalse.
-
regex – Если не
EmailValidator
-
class EmailValidator(message=None, code=None, whitelist=None)[source] -
Параметры: -
message -
Сообщение об ошибке, используемое в
ValidationErrorпри неудачной валидации. По умолчанию"Enter a valid email address".
-
code -
Код ошибки, используемый в
ValidationErrorпри неудачной валидации. По умолчанию"invalid".
-
whitelist -
Белый список доменных имён электронной почты для разрешения. По умолчанию используется регулярное выражение (атрибут
domain_regex) для валидации всего, что стоит после знака @. Однако, если эта строка находится в белом списке, эта валидация пропускается. Если не указано, по умолчанию белый список['localhost']. Другие домены, не содержащие точки, не пройдут валидацию, поэтому вам необходимо добавить их в белый список по мере необходимости.
-
URLValidator
-
class URLValidator(schemes=None, regex=None, message=None, code=None)[source] -
A
RegexValidatorthat ensures a value looks like a URL, and raises an error code of'invalid'if it doesn’t.Loopback addresses and reserved IP spaces are considered valid. Literal IPv6 addresses (RFC 2732) and unicode domains are both supported.
In addition to the optional arguments of its parent
RegexValidatorclass,URLValidatoraccepts an extra optional attribute:-
schemes -
Список схем URL/URI для проверки. Если не указан, используется список по умолчанию:
['http', 'https', 'ftp', 'ftps']. Для справки, на сайте IANA представлен полный список поддерживаемых схем URI.
-
Проверка электронной почты
-
validate_email -
Экземпляр
EmailValidatorбез каких-либо настроек.
Проверка ссылочной строки
-
validate_slug -
Экземпляр
RegexValidatorдля проверки, состоит ли значение только из букв, цифр, символов подчеркивания или дефисов.
Проверка Unicode ссылочной строки
-
validate_unicode_slug -
Экземпляр
RegexValidatorдля проверки, состоит ли значение только из символов Юникода, цифр, символов подчеркивания или дефисов.
Проверка IPv4-адреса
-
validate_ipv4_address[source] -
Экземпляр
RegexValidatorдля проверки на соответствие IPv4-адресу.
Проверка IPv6-адреса
-
validate_ipv6_address[source] -
Использует
django.utils.ipv6для проверки валидности IPv6-адреса.
Проверка IPv4/IPv6-адреса
-
validate_ipv46_address[source] -
Использует как
validate_ipv4_address, так иvalidate_ipv6_address, чтобы убедиться, что значение является валидным IPv4 или IPv6-адресом.
Проверка списка целых чисел, разделенных запятыми
-
validate_comma_separated_integer_list -
Экземпляр
RegexValidatorдля проверки на соответствие списку целых чисел, разделенных запятыми.
Проверка списка целых чисел
-
int_list_validator(sep=', ', message=None, code='invalid', allow_negative=False)[source] -
Возвращает экземпляр
RegexValidator, который гарантирует, что строка состоит из целых чисел, разделенныхsep. Позволяет отрицательные целые числа, еслиallow_negativeравноTrue.
Максимальное значение
-
class MaxValueValidator(limit_value, message=None)[source] -
Выбрасывает
ValidationErrorс кодом'max_value', еслиvalueбольшеlimit_value.
Минимальное значение
-
class MinValueValidator(limit_value, message=None)[source] -
Выбрасывает
ValidationErrorс кодом'min_value', еслиvalueменьшеlimit_value.
Максимальная длина
-
class MaxLengthValidator(limit_value, message=None)[source] -
Выбрасывает
ValidationErrorс кодом'max_length', если длинаvalueбольшеlimit_value.
Минимальная длина
-
class MinLengthValidator(limit_value, message=None)[source] -
Выбрасывает
ValidationErrorс кодом'min_length', если длинаvalueменьшеlimit_value.
Проверка десятичного числа
-
class DecimalValidator(max_digits, decimal_places)[source] -
Выбрасывает
ValidationErrorс кодами:-
'max_digits'если количество цифр большеmax_digits. -
'max_decimal_places'если количество десятичных знаков большеdecimal_places. -
'max_whole_digits'если количество целых цифр больше разницы междуmax_digitsиdecimal_places.
-
Проверка расширения файла
-
class FileExtensionValidator(allowed_extensions, message, code)[source] -
Выбрасывает
ValidationErrorс кодом'invalid_extension', если расширение %%%CODE_BLOCK_140%% (value— этоFile) отсутствует вallowed_extensions. Сравнение расширений выполняется без учёта регистра сallowed_extensions.Предупреждение
Не полагайтесь на проверку расширения файла для определения его типа. Файлы могут быть переименованы с любым расширением, независимо от содержимого.
Проверка расширения изображения
-
validate_image_file_extension[source] -
Использует Pillow для проверки, что
value.name(value— этоFile) имеет валидное расширение изображения.
ProhibitNullCharactersValidator
-
class ProhibitNullCharactersValidator(message=None, code=None)[source] -
Новое в Django 2.0.
Вызывает исключение
ValidationError, еслиstr(value)содержит один или несколько символов нуля ('\x00').Параметры: -
message -
Сообщение об ошибке, используемое
ValidationErrorпри сбое валидации. По умолчанию"Null characters are not allowed.".
-
code -
Код ошибки, используемый
ValidationErrorпри сбое валидации. По умолчанию"null_characters_not_allowed".
-
© Django Software Foundation and individual contributors
Licensed under the BSD License.
https://docs.djangoproject.com/en/2.1/ref/validators/