MinLengthValidator

Валидатор MinLengthValidator используется в формах Django для проверки того, что длина строкового значения не меньше указанного минимального порога. Этот валидатор особенно полезен при работе с полями, где требуется установить минимальное количество символов, например, для паролей, логинов или текстовых полей. Валидатор принимает один обязательный аргумент - limit_value, задающий минимально допустимую длину строки, и опциональный параметр message для кастомизации сообщения об ошибке.

Синтаксис

pythonfrom django.core.validators import MinLengthValidator

validator = MinLengthValidator(limit_value, message=None)

Пример

Рассмотрим использование валидатора в классе формы для проверки минимальной длины имени пользователя:

pythonfrom 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 символов будет вызвана ошибка валидации:

pythonfrom django.test import TestCase

form = UserRegistrationForm(data={'username': 'john'})
print(form.is_valid())
print(form.errors)

Результат выполнения кода:

pythonFalse
{'username': ['Ensure this value has at least 5 characters (it has 4).']}

Пример

Создадим форму для проверки пароля с минимальной длиной 8 символов и кастомным сообщением об ошибке:

pythonfrom 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."
      )
    ]
  )

Попробуем отправить форму с коротким паролем:

pythonform = PasswordForm(data={'password': 'pass123'})
if not form.is_valid():
  print("Form errors:")
  for field, errors in form.errors.items():
    print(f"{field}: {', '.join(errors)}")

Результат выполнения кода:

python"Form errors:"
"password: Password must be at least 8 characters long."

Пример

Комбинируем MinLengthValidator с другими валидаторами для более строгой проверки поля:

pythonfrom 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."
  )

Проверим работу формы с невалидным паролем:

pythonform = 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}")

Результат выполнения кода:

python"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