Spec-Zone.ru › Django 1.10

Валидаторы

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

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

Валидатор регулярных выражений

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.

Валидатор электронной почты

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']. Для справки, полный список допустимых схем URI можно найти на сайте IANA: valid URI schemes.

Проверка почтового адреса

validate_email

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

Проверка слайда

validate_slug

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

Проверка Unicode-слайда

validate_unicode_slug
Добавлена в Django 1.9.

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

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

validate_ipv4_address

Экземпляр 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]
Добавлена в Django 1.9.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Валидатор десятичных чисел

class DecimalValidator(max_digits, decimal_places) [source]
Добавлена в Django 1.9.

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

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

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

Spec-Zone.ru

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