Проверяющие
Написание проверяющих
Проверяющий — это вызываемая функция, которая принимает значение и поднимает 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 -
Список схем URL/URI для проверки. Если не указан, используется список по умолчанию
['http', 'https', 'ftp', 'ftps']. Для справки, на сайте IANA есть полный список допустимых схем URI.
-
validate_email
-
validate_email -
Экземпляр
EmailValidatorбез каких-либо настроек.
validate_slug
-
validate_slug -
Экземпляр
RegexValidator, который гарантирует, что значение состоит только из букв, цифр, подчеркиваний или дефисов.
validate_unicode_slug
-
validate_unicode_slug -
Экземпляр
RegexValidator, который гарантирует, что значение состоит только из букв, цифр, подчеркиваний или дефисов Unicode.
validate_ipv4_address
-
validate_ipv4_address -
Экземпляр
RegexValidator, который проверяет, соответствует ли значение формату IPv4-адреса.
validate_ipv6_address
-
validate_ipv6_address[source] -
Использует
django.utils.ipv6для проверки корректности IPv6-адреса.
validate_ipv46_address
-
validate_ipv46_address[source] -
Использует как
validate_ipv4_address, так иvalidate_ipv6_address, чтобы убедиться, что значение является допустимым IPv4 или IPv6 адресом.
validate_comma_separated_integer_list
-
validate_comma_separated_integer_list -
Экземпляр
RegexValidator, который гарантирует, что значение представляет собой список целых чисел, разделённых запятыми.
int_list_validator
-
int_list_validator(sep=', ', message=None, code='invalid', allow_negative=False)[source] -
Возвращает экземпляр
RegexValidator, который гарантирует, что строка состоит из целых чисел, разделённыхsep. Разрешает отрицательные целые числа, еслиallow_negativeравноTrue.Изменено в Django 1.10:Добавлен параметр
allow_negative.
MaxValueValidator
-
class MaxValueValidator(max_value, message=None)[source] -
Вызывает
ValidationErrorс кодом'max_value', еслиvalueбольше, чемmax_value.
MinValueValidator
-
class MinValueValidator(min_value, message=None)[source] -
Вызывает
ValidationErrorс кодом'min_value', еслиvalueменьше, чемmin_value.
MaxLengthValidator
-
class MaxLengthValidator(max_length, message=None)[source] -
Вызывает
ValidationErrorс кодом'max_length', если длинаvalueбольше, чемmax_length.
MinLengthValidator
-
class MinLengthValidator(min_length, message=None)[source] -
Вызывает
ValidationErrorс кодом'min_length', если длинаvalueменьше, чемmin_length.
DecimalValidator
-
class DecimalValidator(max_digits, decimal_places)[source] -
Вызывает
ValidationErrorсо следующими кодами:-
'max_digits'если количество цифр больше, чемmax_digits. -
'max_decimal_places'если количество десятичных знаков больше, чемdecimal_places. -
'max_whole_digits'если количество целых цифр больше разницы междуmax_digitsиdecimal_places.
-
FileExtensionValidator
-
class FileExtensionValidator(allowed_extensions, message, code)[source] -
Новое в Django 1.11.
Вызывает
ValidationErrorс кодом'invalid_extension', если расширениеvalue.name(valueэтоFile) не найдено вallowed_extensions.Предупреждение
Не полагайтесь на проверку расширения файла для определения типа файла. Файлы могут быть переименованы в любое расширение, независимо от содержащихся данных.
validate_image_file_extension
-
validate_image_file_extension -
Новое в Django 1.11.
Использует Pillow для проверки, что
value.name(valueэтоFile) имеет допустимое расширение изображения.
© Django Software Foundation and individual contributors
Licensed under the BSD License.
https://docs.djangoproject.com/en/1.11/ref/validators/