Валидаторы
Написание валидаторов
Валидатор — это вызываемый объект, который принимает значение и поднимает исключение 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
-
validate_email -
Экземпляр
EmailValidatorбез каких-либо настроек.
validate_slug
-
validate_slug -
Экземпляр
RegexValidator, который проверяет, состоит ли значение только из букв, цифр, подчеркиваний или дефисов.
validate_unicode_slug
-
validate_unicode_slug -
Экземпляр
RegexValidator, который проверяет, состоит ли значение только из символов Юникода, цифр, подчеркиваний или дефисов.
validate_ipv4_address
-
validate_ipv4_address[source] -
Экземпляр
RegexValidator, который проверяет, похоже ли значение на IPv4 адрес.
validate_ipv6_address
-
validate_ipv6_address[source] -
Использует
django.utils.ipv6для проверки валидности IPv6 адреса.
validate_ipv46_address
-
validate_ipv46_address[source] -
Использует как
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)[source] -
Возвращает экземпляр
RegexValidator, который проверяет, состоит ли строка из целых чисел, разделённыхsep. Он допускает отрицательные целые числа, когдаallow_negativeравенTrue.
MaxValueValidator
-
class MaxValueValidator(max_value, message=None)[source] -
Выбрасывает
ValidationErrorс кодом'max_value', еслиvalueбольшеmax_value.
MinValueValidator
-
class MinValueValidator(min_value, message=None)[source] -
Выбрасывает
ValidationErrorс кодом'min_value', еслиvalueменьшеmin_value.
MaxLengthValidator
-
class MaxLengthValidator(max_length, message=None)[source] -
Выбрасывает
ValidationErrorс кодом'max_length', если длинаvalueбольшеmax_length.
MinLengthValidator
-
class MinLengthValidator(min_length, message=None)[source] -
Выбрасывает
ValidationErrorс кодом'min_length', если длинаvalueменьшеmin_length.
DecimalValidator
-
class DecimalValidator(max_digits, decimal_places)[source] -
Выбрасывает
ValidationErrorс следующими кодами:-
'max_digits'если количество цифр большеmax_digits. -
'max_decimal_places'если количество десятичных знаков большеdecimal_places. -
'max_whole_digits'если количество целых цифр больше разницы междуmax_digitsиdecimal_places.
-
FileExtensionValidator
-
class FileExtensionValidator(allowed_extensions, message, code)[source] -
Новое в Django 1.11.
Выбрасывает
ValidationErrorс кодом'invalid_extension', если расширениеvalue.name(value—File) не найдено вallowed_extensions. Расширение сравнивается регистронезависимо сallowed_extensions.Предупреждение
Не полагайтесь на проверку расширения файла для определения типа файла. Файлы могут быть переименованы с любым расширением, независимо от содержащихся в них данных.
validate_image_file_extension
-
validate_image_file_extension -
Новое в Django 1.11.
Использует 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.0/ref/validators/