Валидаторы
Написание валидаторов
Валидатор — это вызываемый объект, который принимает значение и поднимает исключение 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 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
EmailValidatorinstance without any customizations.
validate_slug
-
validate_slug -
A
RegexValidatorinstance that ensures a value consists only of letters, numbers, underscores, or hyphens.
validate_unicode_slug
-
validate_unicode_slug -
A
RegexValidatorinstance that ensures a value consists only of Unicode 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.
int_list_validator
-
int_list_validator(sep=', ', message=None, code='invalid')[source] -
Returns a
RegexValidatorinstance that ensures a string consists of integers separated bysep.
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.
DecimalValidator
-
class DecimalValidator(max_digits, decimal_places)[source] -
Raises
ValidationErrorwith the following codes:-
'max_digits'if the number of digits is larger thanmax_digits. -
'max_decimal_places'if the number of decimals is larger thandecimal_places. -
'max_whole_digits'if the number of whole digits is larger than the difference betweenmax_digitsanddecimal_places.
-
© Django Software Foundation and individual contributors
Licensed under the BSD License.
https://docs.djangoproject.com/en/1.9/ref/validators/