Spec-Zone.ru › Django 4.0

Проверяющие

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

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

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)
Параметры:
  • message – Если не None, переопределяет message.
  • code – Если не None, переопределяет code.
  • allowlist – Если не 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

class URLValidator(schemes=None, regex=None, message=None, code=None)

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

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

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

schemes

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

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)

Вызывает 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

class DecimalValidator(max_digits, decimal_places)

Вызывает ValidationError с следующими кодами:

  • 'max_digits' если количество цифр больше max_digits.
  • 'max_decimal_places' если количество десятичных знаков больше decimal_places.
  • 'max_whole_digits' если количество целых цифр больше разницы между max_digits и decimal_places.

FileExtensionValidator

class FileExtensionValidator(allowed_extensions, message, code)

Вызывает 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 – Если не None, переопределяет message.
  • code – Если не None, переопределяет code.
message

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

code

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

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

Spec-Zone.ru

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