MinLengthValidator
Валидатор MinLengthValidator используется в формах Django для проверки того, что длина строкового значения не меньше указанного минимального порога. Этот валидатор особенно полезен при работе с полями, где требуется установить минимальное количество символов, например, для паролей, логинов или текстовых полей. Валидатор принимает один обязательный аргумент - limit_value, задающий минимально допустимую длину строки, и опциональный параметр message для кастомизации сообщения об ошибке.
Синтаксис
from django.core.validators import MinLengthValidator
validator = MinLengthValidator(limit_value, message=None)
Пример
Рассмотрим использование валидатора в классе формы для проверки минимальной длины имени пользователя:
from django import forms
from django.core.validators import MinLengthValidator
class UserRegistrationForm(forms.Form):
username = forms.CharField(
label="Username",
max_length=30,
validators=[MinLengthValidator(5)],
help_text="Username must be at least 5 characters long."
)
При отправке формы с именем пользователя короче 5 символов будет вызвана ошибка валидации:
from django.test import TestCase
form = UserRegistrationForm(data={'username': 'john'})
print(form.is_valid())
print(form.errors)
Результат выполнения кода:
False
{'username': ['Ensure this value has at least 5 characters (it has 4).']}
Пример
Создадим форму для проверки пароля с минимальной длиной 8 символов и кастомным сообщением об ошибке:
from django import forms
from django.core.validators import MinLengthValidator
class PasswordForm(forms.Form):
password = forms.CharField(
label="Password",
widget=forms.PasswordInput,
validators=[
MinLengthValidator(
limit_value=8,
message="Password must be at least 8 characters long."
)
]
)
Попробуем отправить форму с коротким паролем:
form = PasswordForm(data={'password': 'pass123'})
if not form.is_valid():
print("Form errors:")
for field, errors in form.errors.items():
print(f"{field}: {', '.join(errors)}")
Результат выполнения кода:
"Form errors:"
"password: Password must be at least 8 characters long."
Пример
Комбинируем MinLengthValidator с другими валидаторами для более строгой проверки поля:
from django import forms
from django.core.validators import MinLengthValidator, RegexValidator
class SecurePasswordForm(forms.Form):
password = forms.CharField(
label="Password",
widget=forms.PasswordInput,
validators=[
MinLengthValidator(12),
RegexValidator(
regex=r'^(?=.*[A-Z])(?=.*\d)',
message="Password must contain at least one uppercase letter and one digit."
)
],
help_text="Password must be at least 12 characters long, with uppercase and digit."
)
Проверим работу формы с невалидным паролем:
form = SecurePasswordForm(data={'password': 'weakpass'})
print(f"Is valid: {form.is_valid()}")
print("Errors:")
for field, errors in form.errors.items():
for error in errors:
print(f" - {error}")
Результат выполнения кода:
"Is valid: False"
"Errors:"
" - Ensure this value has at least 12 characters (it has 8)."
" - Password must contain at least one uppercase letter and one digit."
Смотрите также
-
валидатор
MaxLengthValidator,
который проверяет максимальную длину строки -
валидатор
MinValueValidator,
который проверяет минимальное числовое значение -
валидатор
RegexValidator,
который проверяет строку на соответствие регулярному выражению -
класс формы
Form,
который используется для создания форм в Django