Django в 2026-м не «устарел», и не «единственный правильный Python». Его всё ещё ставят туда, где нужны админка, формы, права доступа и предсказуемая серверная модель: внутренние кабинеты, CRM-подобные сервисы, личные кабинеты клиентов, контентные панели, B2B-инструменты. Вакансии с Django есть. Проблема не в рынке, а в roadmap, который выглядит как бесконечный список библиотек.
Ниже — объём, который реально закрывает junior и сильный intern на CIS-рынке: какой кусок языка обязателен, что уметь в ORM и авторизации, какой один проект собрать, как читать вакансии и когда Django уже не ваш вход. Это не курс «весь фреймворк за выходные» и не обещание оффера. Это карта под работу.
Коротко:
- Сначала Python и HTTP, потом Django. Иначе вы копируете туториал и не понимаете, куда падает запрос.
- На первой работе чаще нужны модели, админка, права, формы и простые API, а не «микросервисы на Celery с нуля».
- Один сервис с пользователями, ролями и админкой сильнее десяти блогов из гайда.
- DRF, Celery, Docker подключайте, когда базовый запрос-ответ уже ваш, а не «потому что так в roadmap картинке».
- Готовность к отклику — это проект со ссылкой плюс умение объяснить миграцию, N+1 и «кто может видеть эту страницу».
Зачем учить Django, а не «просто Python»
Python без веб-рамки на рынке чаще уходит в скрипты, данные или сопровождение чужого сервиса. Django — это конкретная роль: человек, который может собрать серверную часть продукта с админкой и не развалить данные. Если цель — войти как Python-разработчик в веб, Django или соседний FastAPI всё равно появятся в описании. Общий язык без веба — другая ветка, её лучше смотреть в Python roadmap, а не мешать с этой.
Django берут не за любовь к «батарейкам». Берут за скорость: модели, миграции, админка, сессии, права. Компании с внутренними панелями не хотят писать CRUD с нуля. Если вам ближе тонкий API без админки — честно смотрите FastAPI roadmap. Оба стека встречаются. Путать их в одном резюме «умею всё» — слабый ход.
Какой объём закрывает junior
Работодатель на входе почти никогда не ждёт, что вы с нуля спроектируете высоконагруженный биллинг. Он ждёт, что вы:
- Поднимете проект, разберётесь в чужих приложениях, не сломаете миграции.
- Добавите модель, форму или endpoint и покроете это тестом.
- Настроите, кто видит объект: staff, обычный пользователь, аноним.
- Не устроите N+1 в списке и не положите секрет в репозиторий.
Это скучный список. Именно он отличает человека после туториала от человека, которому можно дать тикет «добавь поле и фильтр в админке». Архитектура «сервис на сервис» и Kubernetes на первой Django-роли редко являются входным критерием. Если вакансия начинается с Kafka, k8s и «опыт 5 лет», это не junior-roadmap — это другой поиск.
Карта навыков: три слоя, не сорок библиотек
Слой 1. Язык и веб без фреймворка
Пока не уверенно пишете функции, списки, словари, исключения и читаете чужой код — Django будет магией. Нужны: виртуальное окружение, pip, модули, основы SQL (SELECT/JOIN/индекс на пальцах), HTTP-методы, статус-коды, cookies vs headers. Не надо «весь Computer Science». Надо объяснить, чем GET отличается от POST и почему пароль не логируют.
Слой 2. Ядро Django
- Проект и приложения. settings, urls, wsgi/asgi на уровне «куда смотреть», не на уровне написания своего сервера.
- Модели и миграции. поля, связи ForeignKey/M2M, makemigrations / migrate, откат через новую миграцию, не ручное правёние продакшен-таблицы.
- ORM без сюрпризов. filter/exclude, select_related/prefetch_related, агрегации по минимуму, транзакция на «создать заказ и позиции».
- Админка. list_display, фильтры, поиск, readonly, простые inlines. Это не стыдно: у многих продуктов админка — основной интерфейс сотрудников.
- Views и шаблоны или API. Для классического Django — CBV или FBV плюс формы. Для API-вакансий — serializers и viewsets, но после понимания request/response.
- Авторизация. User, login/logout, permissions, группы, is_staff. Свой User с телефоном — только если понимаете AbstractUser.
- Тесты. TestCase на создание объекта и на 403 для чужого пользователя. Один такой тест весит больше сертификата.
Слой 3. То, что добавляют по вакансии
DRF, Celery, Redis, PostgreSQL в Docker, простые сигналы, файлы в storage, логирование. Подключайте пункт, который есть в трёх вакансиях, на которые целитесь, а не «весь стек из картинки 2020 года». Если в ленте нет Celery — не ставьте его в центр roadmap.
Админка, ORM и авторизация: что именно уметь
Три темы, по которым на собеседовании отсеивают быстрее, чем по «что такое MTV».
Админка. Уметь зарегистрировать модель, скрыть поле, запретить удаление, показать связанный объект. Рассказать, почему админка — не «хак для джуна», а интерфейс для операций. Показать кастомный фильтр или действие — плюс, не обязаловка.
ORM. Уметь прочитать SQL в debug toolbar или query у queryset. Объяснить N+1 на примере списка заказов с клиентом. Знать, что get кидает исключение, а filter().first() — нет. Не путать null=True и пустую строку.
Авторизация. Разница authentication и authorization. Login required vs permission. Почему нельзя проверять «id в URL = мой id» только на клиенте. Объектные права: пользователь видит свои заказы, не чужие. Это и есть «закрыть junior», а не цитата из документации про middleware.
Какой проект собрать
Не блог. Не todo, который живёт в туториале. Соберите один сервис с ролями.
Рабочий бриф: «внутренняя панель заявок». Пользователь создаёт заявку. Менеджер меняет статус. Админ видит всех. Есть список, фильтр по статусу, детальная страница, админка, логин. Данные в PostgreSQL. README: как поднять, какие роли, что не сделано.
Это бьётся с реальными кабинетами сильнее, чем интернет-магазин «на миллион сущностей», где половина скопирована. Объём: 2–4 модели, не 20. Честно напишите, чего нет: оплаты, почты, очередей. Рекрутер это ценит. Как упаковать проект в файл — в резюме Python-разработчика и общем описании проектов.
Пример 1. 90 дней до отклика
Предположение: вы уже писали простые скрипты на Python, веба не было. 10–12 часов в неделю.
- Дни 1–20. HTTP, SQL на уровне JOIN, git, один CRUD без Django — хоть на Flask в 80 строк, хоть на встроенном http.server плюс шаблон. Цель: понять запрос.
- Дни 21–45. Официальный туториал Django один раз до конца. Затем выкинуть учебный polls и начать свою панель заявок. Модели, админка, логин.
- Дни 46–65. Права: менеджер не удаляет пользователей. Список без N+1. Два теста. Деплой хотя бы на один понятный хостинг или Docker Compose локально с инструкцией.
- Дни 66–90. По вакансиям добрать один пункт: DRF к той же панели или выгрузка CSV или простой сигнал на смену статуса. Резюме, 15 точечных откликов, не 150.
Если через 90 дней нет ссылки, которую можно открыть за минуту — roadmap не закончен, сколько бы курсов ни было пройдено.
Неделя 1–3: HTTP и SQL без фреймворка. Неделя 4–7: туториал Django один раз, затем своя панель заявок. Неделя 8–10: права, список без N+1, два теста. Неделя 11–13: один пункт из вакансий (DRF или CSV или Docker Compose) и 15 откликов под Django, не под «Python вообще».