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