Валидаторы
Написание валидаторов
Валидатор — это вызываемая функция, которая принимает значение и поднимает 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.
-
regex – Если не
EmailValidator
-
class EmailValidator(message=None, code=None, whitelist=None)[source] -
Параметры: -
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
RegexValidatorthat 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
RegexValidatorclass,URLValidatoraccepts 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
schemesattribute was added.Support for IPv6 addresses, unicode domains, and URLs containing authentication data was added.
-
validate_email
-
validate_email -
An
EmailValidatorinstance without any customizations.
validate_slug
-
validate_slug -
A
RegexValidatorinstance that ensures a value consists only of letters, numbers, underscores, or hyphens.
validate_ipv4_address
-
validate_ipv4_address -
A
RegexValidatorinstance that ensures a value looks like an IPv4 address.
validate_ipv6_address
-
validate_ipv6_address[source] -
Uses
django.utils.ipv6to check the validity of an IPv6 address.
validate_ipv46_address
-
validate_ipv46_address[source] -
Uses both
validate_ipv4_addressandvalidate_ipv6_addressto ensure a value is either a valid IPv4 or IPv6 address.
validate_comma_separated_integer_list
-
validate_comma_separated_integer_list -
A
RegexValidatorinstance that ensures a value is a comma-separated list of integers.
MaxValueValidator
-
class MaxValueValidator(max_value, message=None)[source] -
Raises a
ValidationErrorwith a code of'max_value'ifvalueis greater thanmax_value.The
messageparameter was added.
MinValueValidator
-
class MinValueValidator(min_value, message=None)[source] -
Raises a
ValidationErrorwith a code of'min_value'ifvalueis less thanmin_value.The
messageparameter was added.
MaxLengthValidator
-
class MaxLengthValidator(max_length, message=None)[source] -
Raises a
ValidationErrorwith a code of'max_length'if the length ofvalueis greater thanmax_length.The
messageparameter was added.
MinLengthValidator
-
class MinLengthValidator(min_length, message=None)[source] -
Raises a
ValidationErrorwith a code of'min_length'if the length ofvalueis less thanmin_length.The
messageparameter was added.
© Django Software Foundation and individual contributors
Licensed under the BSD License.
https://docs.djangoproject.com/en/1.8/ref/validators/