Spec-Zone.ru › Django 4.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 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.
message

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

code

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

allowlist

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

URLValidator

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

Подкласс 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 [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

Новая функция в Django 4.1.
class StepValueValidator(limit_value, message=None) [source]

Вызывает ValidationError с кодом 'step_size' если value не является целым кратным limit_value, которое может быть значением с плавающей точкой, целым числом или десятичным значением, или вызываемой функцией.

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

Spec-Zone.ru

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