Валидаторы ¶
Написание валидаторов ¶
Валидатор - это вызываемый объект, который принимает значение и выдает значение,
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 ) ¶ Параметры: - regex - Если нет
None
, отменяетregex
. Может быть строкой регулярного выражения или предварительно скомпилированным регулярным выражением. - сообщение - Если нет
None
, отменяетmessage
. - code - Если нет
None
, отменяетcode
. - inverse_match - Если нет
None
, отменяетinverse_match
. - flags - Если нет
None
, отменяетflags
. В этом случаеregex
должно быть строкой регулярного выражения илиTypeError
быть поднятым.
A
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
мере необходимости.
Не рекомендуется с версии 3.2:
whitelist
Параметр является устаревшим. Используйтеallowlist
вместо этого. Недокументированныйdomain_whitelist
атрибут устарел. Используйтеdomain_allowlist
вместо этого.-
URLValidator
¶
-
class
URLValidator
( scheme = None , regex = None , message = None , code = None ) ¶ RegexValidator
Подкласс , который обеспечивает значение выглядит как URL, и поднимает код ошибки ,'invalid'
если он не делает.Адреса обратной связи и зарезервированные IP-адреса считаются действительными. Буквальные адреса IPv6 (RFC 3986 # section-3.2.2 ) и Unicode домены поддерживаются.
В дополнение к необязательным аргументам своего родительского
RegexValidator
классаURLValidator
принимает дополнительный необязательный атрибут:-
schemes
¶ Список схем URL / URI для проверки. Если не указан, по умолчанию используется список . Для справки на веб-сайте IANA представлен полный список допустимых схем URI .
['http', 'https', 'ftp', 'ftps']
-
validate_email
¶
-
validate_email
¶ EmailValidator
Экземпляр без каких - либо настроек.
validate_slug
¶
-
validate_slug
¶ RegexValidator
Экземпляр , который обеспечивает ценность состоит только из букв, цифр, символов подчеркивания или дефисов.
validate_unicode_slug
¶
-
validate_unicode_slug
¶ RegexValidator
Экземпляр , который обеспечивает значение состоит только из Unicode букв, цифр, символов подчеркивания или дефисов.
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 ) ¶ Вызывает a
ValidationError
с кодом'max_value'
ifvalue
больше чемlimit_value
, что может быть вызываемым.
MinValueValidator
¶
-
class
MinValueValidator
( limit_value , message = None ) ¶ Вызывает a
ValidationError
с кодом'min_value'
ifvalue
меньше чемlimit_value
, что может быть вызываемым.
MaxLengthValidator
¶
-
class
MaxLengthValidator
( limit_value , message = None ) ¶ Вызывает a
ValidationError
с кодом,'max_length'
если длинаvalue
больше чемlimit_value
, который может быть вызываемым.
MinLengthValidator
¶
-
class
MinLengthValidator
( limit_value , message = None ) ¶ Вызывает a
ValidationError
с кодом,'min_length'
если длинаvalue
меньшеlimit_value
, что может быть вызываемым.
DecimalValidator
¶
-
класс
DecimalValidator
( max_digits , decimal_places ) ¶ Повышает
ValidationError
со следующими кодами:'max_digits'
если количество цифр больше, чемmax_digits
.'max_decimal_places'
если количество десятичных знаков больше, чемdecimal_places
.'max_whole_digits'
если количество целых цифр больше, чем разница междуmax_digits
иdecimal_places
.
FileExtensionValidator
¶
-
класс
FileExtensionValidator
( разрешенные_расширения , сообщение , код ) ¶ Вызывает a
ValidationError
с кодом,'invalid_extension'
если расширениеvalue.name
(value
is aFile
) не найдено вallowed_extensions
. Расширение без учета регистра сравнивается с расширениемallowed_extensions
.Предупреждение
Не полагайтесь на проверку расширения файла для определения типа файла. Файлы можно переименовывать, чтобы иметь любое расширение, независимо от того, какие данные они содержат.
validate_image_file_extension
¶
-
validate_image_file_extension
¶ Использует Pillow, чтобы убедиться, что
value.name
(value
is aFile
) имеет допустимое расширение изображения .
ProhibitNullCharactersValidator
¶
-
class
ProhibitNullCharactersValidator
( message = None , code = None ) ¶ Вызывает,
ValidationError
еслиstr(value)
содержит один или несколько нулевых символов ('\x00'
).Параметры: -
message
¶ Сообщение об ошибке, используемое в
ValidationError
случае сбоя проверки. По умолчанию ."Null characters are not allowed."
-
code
¶ Код ошибки, используемый в
ValidationError
случае сбоя проверки. По умолчанию"null_characters_not_allowed"
.
-