Spec-Zone.ru › Django 1.9

Валидаторы

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

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

List of URL/URI schemes to validate against. If not provided, the default list is ['http', 'https', 'ftp', 'ftps']. As a reference, the IANA website provides a full list of valid URI schemes.

Support for IPv6 addresses, unicode domains, and URLs containing authentication data was added.

validate_email

validate_email

An EmailValidator instance without any customizations.

validate_slug

validate_slug

A RegexValidator instance that ensures a value consists only of letters, numbers, underscores, or hyphens.

validate_unicode_slug

validate_unicode_slug

A RegexValidator instance that ensures a value consists only of Unicode letters, numbers, underscores, or hyphens.

validate_ipv4_address

validate_ipv4_address

A RegexValidator instance that ensures a value looks like an IPv4 address.

validate_ipv6_address

validate_ipv6_address [source]

Uses django.utils.ipv6 to check the validity of an IPv6 address.

validate_ipv46_address

validate_ipv46_address [source]

Uses both validate_ipv4_address and validate_ipv6_address to ensure a value is either a valid IPv4 or IPv6 address.

validate_comma_separated_integer_list

validate_comma_separated_integer_list

A RegexValidator instance that ensures a value is a comma-separated list of integers.

int_list_validator

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

Returns a RegexValidator instance that ensures a string consists of integers separated by sep.

MaxValueValidator

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

Raises a ValidationError with a code of 'max_value' if value is greater than max_value.

The message parameter was added.

MinValueValidator

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

Raises a ValidationError with a code of 'min_value' if value is less than min_value.

The message parameter was added.

MaxLengthValidator

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

Raises a ValidationError with a code of 'max_length' if the length of value is greater than max_length.

The message parameter was added.

MinLengthValidator

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

Raises a ValidationError with a code of 'min_length' if the length of value is less than min_length.

The message parameter was added.

DecimalValidator

class DecimalValidator(max_digits, decimal_places) [source]

Raises ValidationError with the following codes:

  • 'max_digits' if the number of digits is larger than max_digits.
  • 'max_decimal_places' if the number of decimals is larger than decimal_places.
  • 'max_whole_digits' if the number of whole digits is larger than the difference between max_digits and decimal_places.

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

Spec-Zone.ru

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