Spec-Zone.ru › Django 2.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.
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 2732) 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

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

Проверка ссылочной строки

validate_slug

Экземпляр RegexValidator для проверки, состоит ли значение только из букв, цифр, символов подчеркивания или дефисов.

Проверка Unicode ссылочной строки

validate_unicode_slug

Экземпляр RegexValidator для проверки, состоит ли значение только из символов Юникода, цифр, символов подчеркивания или дефисов.

Проверка IPv4-адреса

validate_ipv4_address [source]

Экземпляр RegexValidator для проверки на соответствие IPv4-адресу.

Проверка IPv6-адреса

validate_ipv6_address [source]

Использует django.utils.ipv6 для проверки валидности IPv6-адреса.

Проверка IPv4/IPv6-адреса

validate_ipv46_address [source]

Использует как validate_ipv4_address, так и validate_ipv6_address, чтобы убедиться, что значение является валидным IPv4 или IPv6-адресом.

Проверка списка целых чисел, разделенных запятыми

validate_comma_separated_integer_list

Экземпляр RegexValidator для проверки на соответствие списку целых чисел, разделенных запятыми.

Проверка списка целых чисел

int_list_validator(sep=', ', message=None, code='invalid', allow_negative=False) [source]

Возвращает экземпляр RegexValidator, который гарантирует, что строка состоит из целых чисел, разделенных sep. Позволяет отрицательные целые числа, если allow_negative равно True.

Максимальное значение

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

Выбрасывает ValidationError с кодом 'max_value', если value больше limit_value.

Минимальное значение

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

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

Максимальная длина

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

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

Минимальная длина

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

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

Проверка десятичного числа

class DecimalValidator(max_digits, decimal_places) [source]

Выбрасывает ValidationError с кодами:

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

Проверка расширения файла

class FileExtensionValidator(allowed_extensions, message, code) [source]

Выбрасывает ValidationError с кодом 'invalid_extension', если расширение %%%CODE_BLOCK_140%% (value — это File) отсутствует в allowed_extensions. Сравнение расширений выполняется без учёта регистра с allowed_extensions.

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

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

Проверка расширения изображения

validate_image_file_extension [source]

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

ProhibitNullCharactersValidator

class ProhibitNullCharactersValidator(message=None, code=None) [source]
Новое в Django 2.0.

Вызывает исключение 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/2.1/ref/validators/

Spec-Zone.ru

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