Что такое 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. Дальше мы пройдём по этому маршруту шаг за шагом, начав с установки и первого проекта.