Валидаторы
Написание валидаторов
Валидатор — это вызываемый объект, который принимает значение и вызывает исключение 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 3986#section-3.2.2) 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, который гарантирует, что значение состоит только из символов Unicode, цифр, символов подчеркивания или дефисов.
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(limit_value, message=None)[source] -
Выбрасывает
ValidationErrorс кодом'max_value', еслиvalueбольшеlimit_value, что может быть вызываемой функцией.Изменено в Django 2.2:limit_valueтеперь может быть вызываемой функцией.
MinValueValidator
-
class MinValueValidator(limit_value, message=None)[source] -
Выбрасывает
ValidationErrorс кодом'min_value', еслиvalueменьшеlimit_value, что может быть вызываемой функцией.Изменено в Django 2.2:limit_valueтеперь может быть вызываемой функцией.
MaxLengthValidator
-
class MaxLengthValidator(limit_value, message=None)[source] -
Выбрасывает
ValidationErrorс кодом'max_length', если длинаvalueбольшеlimit_value, что может быть вызываемой функцией.Изменено в Django 2.2:limit_valueтеперь может быть вызываемой функцией.
MinLengthValidator
-
class MinLengthValidator(limit_value, message=None)[source] -
Выбрасывает
ValidationErrorс кодом'min_length', если длинаvalueменьшеlimit_value, что может быть вызываемой функцией.Изменено в Django 2.2:limit_valueтеперь может быть вызываемой функцией.
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] -
Выбрасывает
ValidationErrorс кодом'invalid_extension', если расширениеvalue.name(valueэтоFile) не найдено вallowed_extensions. Расширение сравнивается регистронезависимо сallowed_extensions.Предупреждение
Не полагайтесь на проверку расширения файла для определения типа файла. Файлы могут быть переименованы для любого расширения независимо от содержимого данных.
validate_image_file_extension
-
validate_image_file_extension[source] -
Использует Pillow для проверки, что
value.name(valueявляетсяFile) имеет валидное расширение изображения.
ProhibitNullCharactersValidator
-
class ProhibitNullCharactersValidator(message=None, code=None)[source] -
Вызывает
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.2/ref/validators/