Валидаторы

Написание валидаторов

Валидатор - это исполняемый файл, который принимает значение и генерирует 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

classRegexValidator ( 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" .

inverse_match

Режим совпадения для regex . Его значение по умолчанию - False .

flags

В регулярных выражениях флагов используются при составлении регулярных выражений строки regex . Если regex это предварительно скомпилированное регулярное выражение, и flags оно переопределено, TypeError возникает. По умолчанию 0 .

EmailValidator

classEmailValidator ( сообщение = Нет , код = Нет , белый список = Нет )
Настройки:
  • message - Если отличается от None , перегрузка message .
  • code - Если отличается от None , перегрузить code .
  • белый список - если отличается от None , перегрузить whitelist .
message

Сообщение об ошибке, используемое в ValidationError случае сбоя проверки. По умолчанию это ."Saisissez une adresse de courriel valide"

code

Код ошибки, используемый в ValidationError случае сбоя проверки. По умолчанию это "invalid" .

whitelist

Белый список разрешенных доменов электронной почты. По умолчанию domain_regex для проверки всего, что появляется после знака @ , используется регулярное выражение (атрибут ). Однако, если эта строка появляется в белом списке, эта проверка игнорируется. Если этот параметр не указан, его значение по умолчанию равно ['localhost'] . Другие домены, не содержащие точки, не пройдут проверку, поэтому необходимо добавить их в белый список, если они, по вашему мнению, действительны.

URLValidator

classURLValidator ( 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

classMaxValueValidator ( limit_value , message = None )

Выдает исключение ValidationError с кодом, 'max_value' если значение value больше, чем limit_value , что может быть исполняемым.

MinValueValidator

classMinValueValidator ( limit_value , message = None )

Выдает исключение ValidationError с кодом, 'min_value' если значение value меньше limit_value , что может быть исполняемым.

MaxLengthValidator

classMaxLengthValidator ( limit_value , message = None )

Выдает исключение ValidationError с кодом, 'max_length' если длина значения value больше, чем limit_value , что может быть исполняемым.

MinLengthValidator

classMinLengthValidator ( 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

classProhibitNullCharactersValidator ( message = None , code = None )

Выдает исключение, ValidationError если str(value) содержит один или несколько нулевых символов ( '\x00' ).

Настройки:
  • message - Если отличается от None , перегрузка message .
  • code - Если отличается от None , перегрузить code .
message

Сообщение об ошибке, используемое в ValidationError случае сбоя проверки. По умолчанию это ."Les caractères nuls ne sont pas autorisés"

code

Код ошибки, используемый в ValidationError случае сбоя проверки. По умолчанию это "null_characters_not_allowed" .

Copyright ©2020 All rights reserved