Валидаторы ¶
Написание валидаторов ¶
Валидатор - это исполняемый файл, который принимает значение и генерирует 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
. Это может быть строка регулярного выражения или предварительно скомпилированное регулярное выражение. - message - Если отличается от
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
случае сбоя проверки. По умолчанию это ."Saisissez une valeur valide"
-
code
¶ Код ошибки, используемый в
ValidationError
случае сбоя проверки. По умолчанию это"invalid"
.
- regex - если отличается от
EmailValidator
¶
-
class
EmailValidator
( сообщение = Нет , код = Нет , белый список = Нет ) ¶ Настройки: -
message
¶ Сообщение об ошибке, используемое в
ValidationError
случае сбоя проверки. По умолчанию это ."Saisissez une adresse de courriel valide"
-
code
¶ Код ошибки, используемый в
ValidationError
случае сбоя проверки. По умолчанию это"invalid"
.
-
whitelist
¶ Белый список разрешенных доменов электронной почты. По умолчанию
domain_regex
для проверки всего, что появляется после знака @ , используется регулярное выражение (атрибут ). Однако, если эта строка появляется в белом списке, эта проверка игнорируется. Если этот параметр не указан, его значение по умолчанию равно['localhost']
. Другие домены, не содержащие точки, не пройдут проверку, поэтому необходимо добавить их в белый список, если они, по вашему мнению, действительны.
-
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
обеспечения того, чтобы значение состояло только из букв Юникода, цифр, знаков подчеркивания или тире.
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
¶
-
класс
DecimalValidator
( max_digits , decimal_places ) ¶ Выдает исключение
ValidationError
со следующими кодами:'max_digits'
если количество цифр больше чемmax_digits
.'max_decimal_places'
если количество десятичных знаков больше чемdecimal_places
.'max_whole_digits'
если количество цифр целого числа больше, чем разница междуmax_digits
иdecimal_places
.
FileExtensionValidator
¶
-
класс
FileExtensionValidator
( разрешенные_расширения , сообщение , код ) ¶ Выдает исключение
ValidationError
с кодом,'invalid_extension'
если расширениеvalue.name
(value
являющегося объектомFile
) отсутствуетallowed_extensions
. При сравнении расширений сallowed_extensions
регистр не учитывается.Предупреждение
Не полагайтесь на проверку расширения файла для определения типа файла. Файлы можно переименовывать с любым расширением независимо от их содержимого.
validate_image_file_extension
¶
-
validate_image_file_extension
¶ Используйте Pillow, чтобы убедиться, что
value.name
(value
будучи объектомFile
) является допустимым расширением изображения .
ProhibitNullCharactersValidator
¶
-
class
ProhibitNullCharactersValidator
( message = None , code = None ) ¶ Выдает исключение,
ValidationError
еслиstr(value)
содержит один или несколько нулевых символов ('\x00'
).Настройки: -
message
¶ Сообщение об ошибке, используемое в
ValidationError
случае сбоя проверки. По умолчанию это ."Les caractères nuls ne sont pas autorisés"
-
code
¶ Код ошибки, используемый в
ValidationError
случае сбоя проверки. По умолчанию это"null_characters_not_allowed"
.
-