Spec-Zone.ru › Django 1.8

Валидаторы

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

Валидатор — это вызываемая функция, которая принимает значение и поднимает 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 Web site provides a full list of valid URI schemes.

The optional schemes attribute was added.

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

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.

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

Spec-Zone.ru

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