Spec-Zone.ru › Django 2.2

Валидаторы

Написание валидаторов

Валидатор — это вызываемый объект, который принимает значение и вызывает исключение 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/2.2/ref/validators/

Spec-Zone.ru

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