Валидаторы¶
Создание валидаторов¶
A validator is a callable that takes a value and raises a
ValidationError if it doesn’t meet some
criteria. Validators can be useful for re-using validation logic between
different types of fields.
Например, здесь показан валидатор, который принимает только чётные числа:
from django.core.exceptions import ValidationError
from django.utils.translation import gettext_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, то он запустит ваши валидаторы для всех полей формы. Обратитесь к документации на модельные формы для получения информации о том, как валидаторы модели взаимодействуют с формами.
Встроенные валидаторы¶
Модуль django.core.validators содержит коллекцию валидаторов, которые можно использовать как с моделями, так и с полями формы. Они используются Django, но также доступны для применения в ваших полях. Их можно использовать в дополнение к или вместо метода field.clean().
RegexValidator¶
- class RegexValidator(regex=None, message=None, code=None, inverse_match=None, flags=0)¶
- Параметры:
regex – Если не
None, переопределяетregex. Может быть строка с или уже скомпилированный объект регулярного выражения.message – Если не
None, переопределяетmessage.code – Если не
None, переопределяетcode.inverse_match – Если не
None, переопределяетinverse_match.flags – Если не
None, переопределяетflags. В этом случаеregexдолжен быть строкой с регулярным выражением, иначе будет вызвано исключениеTypeError.
RegexValidatorищет предоставленноезначениедля данного регулярного выражения с помощьюre.search(). По умолчанию вызываетValidationErrorсmessageиcode, если совпадение не найдено. Его поведение можно инвертировать, установив дляinverse_matchзначениеTrue, и в этом случаеValidationErrorвызывается, когда соответствие обнаружено.- regex¶
Шаблон регулярного выражения для поиска в пределах предоставленного значения с использованием
re.search(). Это может быть строка или предварительно скомпилированное регулярное выражение, созданное с помощьюre.compile(). По умолчанию используется пустая строка, которая будет найдена во всех возможных значениях.
- message¶
Сообщение об ошибке, используемое исключением
ValidationError, если проверка не прошла. По умолчанию,"Enter a valid value".
- code¶
Код ошибки, используемый исключением
ValidationError, если проверка не прошла. По умолчанию"invalid".
EmailValidator¶
- class EmailValidator(message=None, code=None, whitelist=None)¶
- Параметры:
- message¶
Сообщение об ошибке, используемое исключением
ValidationError, если проверка не прошла. По умолчанию,"Enter a valid email address".
- code¶
Код ошибки, используемый исключением
ValidationError, если проверка не прошла. По умолчанию"invalid".
- whitelist¶
Whitelist of email domains to allow. By default, a regular expression (the
domain_regexattribute) is used to validate whatever appears after the @ sign. However, if that string appears in the whitelist, this validation is bypassed. If not provided, the default whitelist is['localhost']. Other domains that don’t contain a dot won’t pass validation, so you’d need to whitelist them as necessary.
URLValidator¶
- class URLValidator(schemes=None, regex=None, message=None, code=None)¶
A
RegexValidatorsubclass that ensures a value looks like a URL, and raises an error code of'invalid'if it doesn’t.Адреса обратной связи и зарезервированные IP-пространства считаются действительными. Поддерживаются как буквальные адреса IPv6 (RFC 3986 Section 3.2.2), так и домены Unicode.
В дополнение к необязательным аргументам родительского класса
RegexValidator,URLValidatorпринимает дополнительный необязательный атрибут:- schemes¶
Список разрешенных для URL/URI протоколов. По умолчанию
['http', 'https', 'ftp', 'ftps']. Сайт IANA Web предоставляет полный список валидных протоколов 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¶
Использует
django.utils.ipv6для проверки соответствия значения IPv6 адресу.
validate_ipv46_address¶
- validate_ipv46_address¶
Использует оба валидатора (
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)¶
Экземпляр класса
RegexValidator, который проверяет, что значение является списком целых чисел, разделённыхsep. Разрешает негативные целый числа, еслиallow_negativeравенTrue.
MaxValueValidator¶
- class MaxValueValidator(limit_value, message=None)¶
Вызывает исключение
ValidationErrorс кодом'max_value', еслиvalueбольше, чемmax_value.
MinValueValidator¶
- class MinValueValidator(limit_value, message=None)¶
Вызывает исключение
ValidationErrorс кодом'min_value', еслиvalueменьше, чемmin_value.
MaxLengthValidator¶
- class MaxLengthValidator(limit_value, message=None)¶
Вызывает исключение
ValidationErrorс кодом'max_length', если длинаvalueбольше, чемmax_length.
MinLengthValidator¶
- class MinLengthValidator(limit_value, message=None)¶
Вызывает исключение
ValidationErrorс кодом'min_length', если длинаvalueменьше, чемmin_length.
DecimalValidator¶
- class DecimalValidator(max_digits, decimal_places)¶
Вызывает исключение
ValidationErrorсо следующими кодами ошибок:'max_digits', если количество цифр большеmax_digits.'max_decimal_places', если количество знаков после запятой большеdecimal_places.'max_whole_digits', если количество цифр в целой части больше, чем разница междуmax_digitsиdecimal_places.
FileExtensionValidator¶
- class FileExtensionValidator(allowed_extensions, message, code)¶
Вызывает
ValidationErrorс кодом'invalid_extension', если расширениеvalue.name(valueявляетсяFile) не найдено вallowed_extensions. Расширение сравнивается регистронезависимо сallowed_extensions.Предупреждение
Не полагайтесь на проверку расширения файла, проверяя его тип. Файл может быть переименован и расширение никак не определяет его содержимое.
validate_image_file_extension¶
- validate_image_file_extension¶
Использует Pillow, чтобы убедиться что
value.name(valueявляетсяFile) содержит правильное расширение для изображения.
ProhibitNullCharactersValidator¶
- class ProhibitNullCharactersValidator(message=None, code=None)¶
Raises a
ValidationErrorifstr(value)contains one or more nulls characters ('\x00').- Параметры:
- message¶
Сообщение об ошибке, используемое исключением
ValidationError, если проверка не прошла. По умолчанию,"Null characters are not allowed.".
- code¶
Код ошибки, используемый исключением
ValidationError, если проверка не прошла. По умолчанию"null_characters_not_allowed".