Короткий ответ
MVC и MVT разделяют данные, бизнес-логику и представление, но распределяют роли по-разному. В MVC запросы обрабатывает явный контроллер, а в MVT эту роль берёт на себя фреймворк: view содержит логику запроса, а template отвечает за вывод.
Как это работает подробнее
MVT в терминах Django называют также MTV — это вариант MVC, адаптированный под философию фреймворка.
- MVC. Модель управляет данными и бизнес-логикой, представление показывает их пользователю, а контроллер принимает запросы и координирует модель и представление.
- MVT. Модель работает с данными и базой, view выполняет прикладную логику запроса, а шаблон определяет, как данные отображаются.
- Роль фреймворка. В Django диспетчер URL и механизм обработки запросов выполняют маршрутизацию автоматически, поэтому отдельный контроллер не нужен.
- Терминология. В MVT view — функция или класс, обрабатывающий запрос, а представлением занимается template.
Что использовать на практике
- Структура проекта. Держи модели в models.py, обработчики — во views.py, шаблоны — в templates.
- Разделение обязанностей. Не смешивай бизнес-логику с кодом отображения.
- Маршрутизация. Описывай URL в urls.py и связывай их с view-функциями.
Подводные камни
- Путаница в терминах. В MVT слово view означает обработчик запроса, а не то, что видит пользователь, как в MVC.
- Логика в шаблонах. Вычисления в шаблонах Django размывают границы ответственности.
- Толстые view. Если вся логика собрана во view-функциях, проект тяжело сопровождать.