Spec-Zone.ru › Django 3.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) [source]
Параметры:
  • regex – Если не None, переопределяет regex. Может быть строкой регулярного выражения или предварительно скомпилированным регулярным выражением.
  • message – Если не None, переопределяет message.
  • code – Если не None, переопределяет code.
  • inverse_match – Если не None, переопределяет inverse_match.
  • flags – Если не None, переопределяет flags. В этом случае regex должен быть строкой регулярного выражения, иначе возбуждается TypeError.
regex

Шаблон регулярного выражения для поиска в предоставленном value, или предварительно скомпилированное регулярное выражение. По умолчанию вызывает ValidationError с message и code, если совпадения не найдено. Это поведение можно изменить, задав inverse_match в значение True, в этом случае исключение ValidationError будет возбуждаться при нахождении совпадения. По умолчанию соответствует любой строке (включая пустую).

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

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

code

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

whitelist

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

URLValidator

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

A RegexValidator that ensures a value looks like a URL, and raises an error code of 'invalid' if it doesn’t.

Loopback addresses and reserved IP spaces are considered valid. Literal IPv6 addresses (RFC 3986#section-3.2.2) and unicode domains are both supported.

In addition to the optional arguments of its parent RegexValidator class, URLValidator accepts an extra optional attribute:

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, что может быть вызываемой функцией.

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

limit_value теперь может быть вызываемой функцией.

MinValueValidator

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

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

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

limit_value теперь может быть вызываемой функцией.

MaxLengthValidator

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

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

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

limit_value теперь может быть вызываемой функцией.

MinLengthValidator

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

Возбуждает ValidationError с кодом 'min_length', если длина value меньше, чем limit_value, что может быть вызываемой функцией.

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

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

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

Spec-Zone.ru

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