Валидаторы

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

Валидатор - это вызываемый объект, который принимает значение и выдает значение, 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. Может быть строкой регулярного выражения или предварительно скомпилированным регулярным выражением.
  • сообщение - Если нет 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".

inverse_match

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

flags

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

EmailValidator

classEmailValidator ( message = None , code = None , allowlist = None )
Параметры:
  • сообщение - Если нет None, отменяет message.
  • code - Если нет None, отменяет code.
  • список разрешений - Если нет None, отменяет allowlist.
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

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Экземпляр , который обеспечивает значение состоит только из 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

classMaxValueValidator ( limit_value , message = None )

Вызывает a ValidationErrorс кодом 'max_value'if valueбольше чем limit_value, что может быть вызываемым.

MinValueValidator

classMinValueValidator ( limit_value , message = None )

Вызывает a ValidationErrorс кодом 'min_value'if valueменьше чем limit_value, что может быть вызываемым.

MaxLengthValidator

classMaxLengthValidator ( limit_value , message = None )

Вызывает a ValidationErrorс кодом, 'max_length'если длина valueбольше чем limit_value, который может быть вызываемым.

MinLengthValidator

classMinLengthValidator ( 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( valueis a File) не найдено в allowed_extensions. Расширение без учета регистра сравнивается с расширением allowed_extensions.

Предупреждение

Не полагайтесь на проверку расширения файла для определения типа файла. Файлы можно переименовывать, чтобы иметь любое расширение, независимо от того, какие данные они содержат.

validate_image_file_extension

validate_image_file_extension

Использует Pillow, чтобы убедиться, что value.name( valueis a File) имеет допустимое расширение изображения .

ProhibitNullCharactersValidator

classProhibitNullCharactersValidator ( message = None , code = None )

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

Параметры:
  • сообщение - Если нет None, отменяет message.
  • code - Если нет None, отменяет code.
message

Сообщение об ошибке, используемое в ValidationErrorслучае сбоя проверки. По умолчанию ."Null characters are not allowed."

code

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

Copyright ©2021 All rights reserved