Ответ
Class-Based Views (CBV) — это способ написания представлений (views) в Django с использованием классов Python вместо обычных функций (Function-Based Views, FBV).
Они предоставляют набор готовых базовых классов и миксинов для решения типовых задач, таких как отображение списков, деталей объекта, создание и редактирование форм. Это позволяет писать более структурированный и переиспользуемый код.
Пример ListView для отображения списка постов:
# views.py
from django.views.generic import ListView
from .models import Post
class PostListView(ListView):
# 1. Указываем модель, с которой работаем
model = Post
# 2. Указываем путь к шаблону
template_name = 'blog/post_list.html'
# 3. Указываем имя переменной в контексте шаблона
context_object_name = 'posts'
Этот класс автоматически извлечет все объекты Post из базы данных и передаст их в указанный шаблон.
Сравнение CBV и FBV
| Критерий | Class-Based Views (CBV) | Function-Based Views (FBV) |
|---|---|---|
| Структура | Логика распределена по методам (get, post) и миксинам. |
Весь код находится в одной функции. |
| Переиспользование | Высокое, за счет наследования и миксинов. | Низкое, часто приводит к дублированию кода. |
| Читаемость | Может быть сложнее для новичков из-за "магии" под капотом. | Очень явный и прямолинейный поток выполнения. |
| Лучшее применение | CRUD-операции, страницы со сложной логикой. | Простые, уникальные представления, обработка AJAX. |
Когда использовать CBV? Используйте CBV для стандартных операций (списки, детали, создание, обновление, удаление), чтобы следовать принципу DRY и структурировать проект. Для очень специфических или простых задач FBV могут быть более подходящим и понятным решением.