Что такое Django и паттерн MVT

Django — это «батарейки в комплекте»: фреймворк, который берёт на себя рутину веб-разработки, чтобы вы писали логику, а не велосипеды.
Суть: Django — высокоуровневый Python-фреймворк, который превращает HTTP-запрос в ответ через цепочку URL → View → Model/Template. Он даёт ORM, админку, формы, аутентификацию и безопасность «из коробки».

Зачем вообще нужен фреймворк

Представьте, что вы пишете сайт с нуля на чистом Python. Вам придётся вручную разбирать HTTP-запросы, маршрутизировать URL, открывать соединения с базой, экранировать данные от SQL-инъекций, генерировать HTML, обрабатывать сессии и куки, защищаться от CSRF-атак. Это сотни строк инфраструктурного кода ещё до того, как вы напишете хоть одну строчку полезной логики. Фреймворк забирает эту рутину на себя. Django — один из самых зрелых: ему уже 20 лет (первый релиз — 2005 год), а актуальная стабильная ветка — Django 5.2 LTS и Django 6.0, вышедший в декабре 2025 года.

Девиз Django — «batteries included», «батарейки в комплекте». В отличие от микрофреймворков вроде Flask, где вы сами собираете стек из отдельных библиотек, Django приносит готовый набор: ORM для работы с базой без SQL, систему шаблонов, формы с валидацией, готовую админ-панель, аутентификацию пользователей и продуманную защиту от типовых веб-уязвимостей.

Паттерн MVT: как Django думает о приложении

Многие слышали про MVC (Model-View-Controller). Django использует его вариацию — MVT (Model-View-Template). Названия сбивают новичков с толку, поэтому разберёмся точно. Model — это данные и бизнес-логика, классы Python, которые отображаются в таблицы базы. Template — это представление, HTML с дырками для подстановки данных. А View в Django — это не «вид» из MVC, а функция или класс, который принимает запрос и решает, что вернуть. То есть Django-View играет роль контроллера из классического MVC.

Вот полный путь запроса через Django:

HTTP-запрос (браузер)
      │
      ▼
  wsgi/asgi.py  ── точка входа сервера
      │
      ▼
  middleware    ── сессии, аутентификация, CSRF
      │
      ▼
  urls.py       ── URLconf: какой URL → какая view
      │
      ▼
  views.py      ── обработка: достаём данные
      │           ┌──────────────┐
      ├──────────▶│  models.py   │ ── ORM ↔ база данных
      │           └──────────────┘
      ▼
  templates/*.html ── рендер HTML с данными
      │
      ▼
HTTP-ответ (HTML/JSON) → браузер

Запомните этот рисунок — он объясняет 90% того, как устроено любое Django-приложение. Каждый раздел этого учебника детально раскрывает один из блоков схемы.

Проект и приложения

В Django есть два уровня: проект (project) и приложения (apps). Проект — это сайт целиком, со всеми настройками. Приложение — это переиспользуемый модуль внутри проекта: блог, магазин, система комментариев. Один проект может содержать много приложений, и хорошо написанное приложение можно перенести в другой проект. Это ключевая идея модульности.

Как это работает под капотом

Когда приходит запрос, сервер (Gunicorn, Uvicorn) передаёт его в Django через интерфейс WSGI или ASGI. Django прогоняет запрос через цепочку middleware — слоёв-обёрток, каждый из которых может что-то добавить или проверить (например, разобрать куку сессии или проверить CSRF-токен). Затем URL-резолвер сопоставляет путь запроса с шаблонами в urls.py и вызывает соответствующую view. View достаёт данные через модели, передаёт их в шаблон и возвращает объект HttpResponse. Этот объект снова проходит через middleware в обратном порядке и уходит браузеру.

Частые ошибки

  • Путать View в Django с View из MVC. В Django View — это контроллер. Шаблон (Template) — это «вид».
  • Считать проект и приложение одним и тем же. Команда startproject создаёт каркас сайта, startapp — модуль внутри него.
  • Игнорировать виртуальное окружение. Django ставят в venv, а не глобально, иначе конфликты версий неизбежны.
  • Брать устаревшие туториалы. Многие гайды используют url() вместо современного path() и старый стиль импортов.

Best practices

  • Используйте актуальную LTS-версию (Django 5.2) для новых проектов — три года гарантированных обновлений безопасности.
  • Один проект — несколько небольших приложений с чёткой зоной ответственности, а не одно гигантское.
  • С первого дня держите зависимости в requirements.txt и работайте в виртуальном окружении.

Итоги

Django — зрелый «всё включено» фреймворк на Python. Его архитектура MVT раскладывает приложение на модели (данные), шаблоны (представление) и views (логика-контроллер). Любой запрос идёт по предсказуемому маршруту: URL → View → Model/Template → Response. Дальше мы пройдём по этому маршруту шаг за шагом, начав с установки и первого проекта.

Проверьте себя
1. Какую роль в Django выполняет View?
AХранит данные в базе
BЭто контроллер: принимает запрос и решает, что вернуть
CОтвечает только за вёрстку HTML
DНастраивает сервер
2. Чем приложение (app) отличается от проекта (project)?
AНичем, это синонимы
BПроект — модуль внутри приложения
CПриложение — переиспользуемый модуль внутри проекта-сайта
DПриложение нельзя создать без интернета