Spec-Zone.ru › Django 5.1

Проверяющие

Написание проверяющих

Проверяющий — это вызываемый объект, принимающий значение и генерирующий исключение 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.

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

class EmailValidator(message=None, code=None, allowlist=None) [source]
Параметры:
  • message – Если не None, переопределяет message.
  • code – Если не None, переопределяет code.
  • allowlist – Если не None, переопределяет allowlist.

Валидатор электронной почты гарантирует, что значение имеет вид адреса электронной почты и, если это не так, выбросит исключение ValidationError с сообщением message и кодом code. Значения, длина которых превышает 320 символов, всегда считаются невалидными.

message

Сообщение об ошибке, используемое при проверке валидации ValidationError, если проверка не пройдена. По умолчанию "Enter a valid email address".

code

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

allowlist

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

DomainNameValidator

Новое в Django 5.1.
class DomainNameValidator(accept_idna=True, message=None, code=None) [source]

Подкласс RegexValidator, который гарантирует, что значение имеет вид домена. Значения, длина которых превышает 255 символов, всегда считаются невалидными. IP-адреса не принимаются как допустимые доменные имена.

В дополнение к необязательным аргументам родительского класса RegexValidator, DomainNameValidator принимает дополнительный необязательный атрибут:

accept_idna

Определяет, следует ли принимать интернационализированные доменные имена, то есть доменные имена, содержащие не-ASCII символы. По умолчанию True.

URLValidator

class URLValidator(schemes=None, regex=None, message=None, code=None) [source]

Подкласс RegexValidator, который гарантирует, что значение имеет вид URL-адреса и, если это не так, выводит код ошибки 'invalid'. Значения, длина которых превышает max_length символов, всегда считаются невалидными.

Петли обратной связи и зарезервированные IP-пространства считаются допустимыми. Литеральные IPv6-адреса (RFC 3986#section-3.2.2) и домены Unicode поддерживаются.

В дополнение к необязательным аргументам родительского класса RegexValidator, URLValidator принимает дополнительный необязательный атрибут:

schemes

Список схем URL/URI для проверки. Если не указано, по умолчанию список ['http', 'https', 'ftp', 'ftps']. В качестве справки, сайт IANA предоставляет полный список допустимых схем URI.

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

Значения, начинающиеся с file:/// , не пройдут проверку, даже если схема file указана. Допустимые значения должны содержать хост.

max_length

Максимальная длина значений, которые могут считаться допустимыми. По умолчанию 2048 символов.

validate_email

validate_email

Экземпляр EmailValidator без каких-либо настроек.

validate_domain_name

Новое в Django 5.1.
validate_domain_name

Экземпляр DomainNameValidator без каких-либо настроек.

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, которое может быть вызываемым объектом.

MinValueValidator

class MinValueValidator(limit_value, message=None) [source]

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

MaxLengthValidator

class MaxLengthValidator(limit_value, message=None) [source]

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

MinLengthValidator

class MinLengthValidator(limit_value, message=None) [source]

Вызывает ValidationError с кодом 'min_length', если длина value меньше, чем 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 – Если не None, переопределяет message.
  • code – Если не None, переопределяет code.
message

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

code

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

StepValueValidator

class StepValueValidator(limit_value, message=None, offset=None) [source]

Вызывает ValidationError с кодом 'step_size', если value не является целым кратным limit_value, которое может быть числом с плавающей точкой, целым числом, десятичным значением или вызываемым объектом. Когда offset установлено, проверка выполняется относительно limit_value плюс offset. Например, для StepValueValidator(3, offset=1.4) допустимые значения включают 1.4, 4.4, 7.4, 10.4, и так далее.

Изменено в Django 5.0:

Добавлен аргумент offset.

© Django Software Foundation and individual contributors
Licensed under the BSD License.
https://docs.djangoproject.com/en/5.1/ref/validators/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API