Spec-Zone.ru › Django 1.11

Проверяющие

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

Проверяющий — это вызываемая функция, которая принимает значение и поднимает ValidationError, если оно не соответствует некоторым критериям. Проверяющие могут быть полезны для повторного использования логики проверки между различными типами полей.

Например, вот проверяющий, который допускает только чётные числа:

from django.core.exceptions import ValidationError
from django.utils.translation import ugettext_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

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

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

Добавлен параметр allow_negative.

MaxValueValidator

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

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

MinValueValidator

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

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

MaxLengthValidator

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

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

MinLengthValidator

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

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

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]
Новое в Django 1.11.

Вызывает ValidationError с кодом 'invalid_extension', если расширение value.name (value это File) не найдено в allowed_extensions.

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

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

validate_image_file_extension

validate_image_file_extension
Новое в Django 1.11.

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

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

Spec-Zone.ru

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