Какую роль выполняет метод is_valid() у форм в Django

Ответ

Метод is_valid() является центральным элементом механизма валидации форм в Django. Его вызов запускает цепочку проверок и является обязательным шагом перед работой с данными формы.

При вызове is_valid() происходят следующие действия:

  1. Запуск валидаторов: Выполняются все проверки, определённые для каждого поля формы (например, max_length, required, кастомные валидаторы).
  2. Вызов методов очистки: Последовательно вызываются методы clean_<имя_поля>() для каждого поля и общий метод clean() для всей формы. Это позволяет реализовать сложную логику валидации, зависящую от нескольких полей.
  3. Заполнение errors: Если хотя бы одна проверка не пройдена, словарь form.errors заполняется сообщениями об ошибках.
  4. Заполнение cleaned_data: Если все проверки успешно пройдены, данные формы, приведённые к нужным типам Python (например, строка -> int, date), помещаются в словарь form.cleaned_data.
  5. Возврат результата: Метод возвращает True, если ошибок нет, и False в противном случае.

Пример использования:

# views.py
from django.shortcuts import render
from .forms import ContactForm

def contact_view(request):
    if request.method == 'POST':
        form = ContactForm(request.POST)

        # Запускаем валидацию
        if form.is_valid():
            # Данные корректны и доступны в form.cleaned_data
            name = form.cleaned_data.get('name')
            email = form.cleaned_data.get('email')
            # ... логика обработки данных ...
            return redirect('success_page')
    else:
        form = ContactForm()

    # Если GET-запрос или форма невалидна, отображаем её с ошибками
    return render(request, 'contact.html', {'form': form})

Использование is_valid() — это критически важный шаг для обеспечения целостности и безопасности данных, поступающих от пользователя.