Учебник Django для начинающих
Полный премиум-курс по Django — высокоуровневому Python-фреймворку для веб-разработки. Вы пройдёте весь путь от паттерна MVT и первого проекта до моделей и ORM, миграций, views и маршрутизации, шаблонов, форм, аутентификации, встроенной защиты от веб-атак, деплоя в продакшен через Nginx и Gunicorn и построения REST API. Каждый урок — это глубокое объяснение с диаграммами, запускаемыми примерами, разбором частых ошибок новичков и проверенными практиками. Контент актуален для Django 5.2 LTS и 6.0.
Курс «Django: веб на Python» состоит из 10 разделов и 37 уроков: Введение и архитектура MVT, Модели и база данных, Views и URL, Шаблоны, Формы и пользователи, К продакшену, ORM вглубь и оптимизация, Django REST Framework, Продвинутые возможности Django и Кэширование, задачи и масштабирование. Уроки идут по порядку — от основ к более сложным темам, в каждом есть объяснение с примерами, а в конце — вопросы для самопроверки. К урокам привязаны задачи с автоматической проверкой: прочитали тему — сразу закрепили её кодом.
Программа курса
1 Введение и архитектура MVT
- Что такое Django и паттерн MVT
Знакомство с Django: зачем нужен фреймворк, паттерн MVT, проект и приложения, полный путь HTTP-запроса от URL до ответа.
- Установка, проект и первое приложение
Установка Django в виртуальное окружение, создание проекта и приложения, структура файлов, регистрация в INSTALLED_APPS и запуск сервера.
- Жизненный цикл запроса и middleware
Полный путь HTTP-запроса в Django: сервер, middleware, URLconf, view, HttpResponse. Объект request, методы GET и POST, как работает URL-резолвер.
- Что такое Django и паттерн MVT
2 Модели и база данных
- Модели: классы Python как таблицы БД
Модели Django как декларативное описание таблиц: поля и их типы, опции null/blank/default, класс Meta, метод __str__, ORM и защита от SQL-инъекций.
- Миграции: версионирование схемы БД
Система миграций Django: makemigrations и migrate, файлы миграций, таблица django_migrations, граф зависимостей, откат, sqlmigrate и частые ошибки.
- ORM и QuerySet: запросы к базе на Python
Менеджер objects и QuerySet: filter, exclude, order_by, лукапы с двойным подчёркиванием, ленивость запросов, отличие get от filter, защита от N+1.
- Связи моделей: ForeignKey, M2M, OneToOne
Три типа отношений в Django: ForeignKey, ManyToManyField, OneToOneField. Параметр on_delete, обратные связи и related_name, промежуточные таблицы, защита от N+1.
- Админка: бесплатный CRUD из коробки
Встроенная админ-панель Django: createsuperuser, регистрация модели, класс ModelAdmin, опции list_display, list_filter, search_fields, inline-формы и безопасность.
- Модели: классы Python как таблицы БД
3 Views и URL
- Функциональные views (FBV)
Функциональные views Django: функция request→response, помощники render, redirect, get_object_or_404, обработка GET и POST, паттерн POST-redirect-GET, возврат JSON.
- Class-Based Views и generic views
Class-Based Views Django: ListView, DetailView, CreateView, UpdateView, DeleteView. Подключение через as_view(), механизм dispatch, выбор между FBV и CBV.
- URLconf: маршрутизация с path() и reverse
Маршрутизация Django: path() и конвертеры типов (int, slug, uuid), include() для модульности, именованные маршруты, reverse и тег url, get_absolute_url.
- Функциональные views (FBV)
4 Шаблоны
- Шаблоны DTL: переменные, теги, фильтры
Django Template Language: переменные через {{ }}, теги if и for, фильтры, передача context из view, автоэкранирование HTML и защита от XSS.
- Наследование шаблонов: extends и блоки
Наследование шаблонов Django: базовый шаблон с block, расширение через extends, include для фрагментов, block.super, размещение шаблонов в подпапках приложений.
- Статические файлы: static, collectstatic, media
Работа со статикой в Django: тег static, настройки STATIC_URL/STATIC_ROOT/STATICFILES_DIRS, collectstatic, разница static и media, WhiteNoise для продакшена.
- Шаблоны DTL: переменные, теги, фильтры
5 Формы и пользователи
- Формы Django: валидация и cleaned_data
Класс Form в Django: декларативное описание полей, поток валидации, is_valid и cleaned_data, errors, методы clean для кастомной валидации, csrf_token в шаблоне.
- ModelForm: формы из моделей и save()
ModelForm в Django: генерация полей из модели через Meta, сохранение методом save(), приём commit=False, редактирование через instance, связь с CreateView и UpdateView.
- Пользователи: аутентификация и пароли
Система пользователей Django: модель User, authenticate/login/logout, декоратор login_required и LoginRequiredMixin, хеширование паролей с солью, сессии.
- Безопасность: XSS, CSRF, SQL-инъекции
Встроенная защита Django: автоэкранирование от XSS, CSRF-токен, параметризованные запросы ORM против SQL-инъекций, защитные заголовки, ALLOWED_HOSTS, CSP в Django 6.0.
- Формы Django: валидация и cleaned_data
6 К продакшену
- Настройки для продакшена и секреты
Подготовка settings для продакшена: секреты в переменных окружения, DEBUG=False, ALLOWED_HOSTS, PostgreSQL вместо SQLite, разделение настроек base/dev/prod, django-environ.
- Деплой: Gunicorn, Nginx и продакшен-стек
Развёртывание Django в продакшене: почему не runserver, связка Nginx + Gunicorn/Uvicorn, воркеры, обратный прокси, systemd, чек-лист migrate/collectstatic/check --deploy.
- Django REST Framework: API на Django
Основы Django REST Framework: сериализаторы (модель ↔ JSON), ModelViewSet для CRUD, роутеры с автогенерацией URL, права доступа, пагинация, async-возможности Django 5.2.
- Настройки для продакшена и секреты
7 ORM вглубь и оптимизация
- Ленивость QuerySet: когда выполняется запрос
QuerySet в Django ленив: запрос уходит в базу лишь при обращении к данным. Разбираем кэш результата, цепочки фильтров и сужение выборки через only/defer/values.
- Проблема N+1: select_related и prefetch_related
Проблема N+1 в Django ORM: откуда лишние запросы, select_related делает JOIN для ForeignKey, а prefetch_related грузит M2M и обратные связи отдельным запросом.
- annotate, aggregate, Q и F
Агрегации в Django ORM: aggregate для сводки выборки, annotate для значений на строку, F-выражения для операций в базе и Q-объекты для сложных условий с OR.
- Транзакции, блокировки и индексы
Транзакции в Django: atomic для атомарности, select_for_update против гонок, когда нужны индексы (db_index, Meta.indexes) и raw() как мера для сырого SQL.
- Ленивость QuerySet: когда выполняется запрос
8 Django REST Framework
- Сериализаторы: преобразование и валидация
Сериализаторы DRF: Serializer vs ModelSerializer, валидация полей и объекта, вложенные сериализаторы, read_only и write_only, представление и парсинг JSON.
- APIView, generics и ViewSet
Вьюхи DRF: низкоуровневый APIView, generic-вьюхи (ListCreateAPIView и др.), ViewSet и роутеры, маршрутизация через router, что выбрать под задачу.
- Аутентификация и права
Аутентификация и авторизация в DRF: TokenAuthentication и JWT, классы permissions (IsAuthenticated, кастомные), разница между аутентификацией и правами доступа.
- Пагинация, фильтрация, throttling
DRF: виды пагинации (page/limit-offset/cursor), фильтрация через django-filter, поиск и сортировка (SearchFilter, OrderingFilter), ограничение частоты запросов throttling.
- Сериализаторы: преобразование и валидация
9 Продвинутые возможности Django
- Class-based views вглубь
Зачем нужны class-based views в Django, иерархия и миксины, ListView/DetailView/CreateView, get_queryset и get_context_data, когда CBV, а когда функции.
- Сигналы: когда использовать и когда нет
Сигналы Django: post_save, pre_delete и другие, декоратор receiver, типичные применения, почему сигналы усложняют отладку и какие есть альтернативы.
- Своя middleware и порядок
Как пишется middleware в Django, порядок выполнения по списку MIDDLEWARE, обработка запроса и ответа, реальные примеры — логирование и замер времени.
- Менеджеры и команды управления
Кастомные Manager и QuerySet-методы в Django для переиспользования запросов, и собственные команды manage.py через BaseCommand с аргументами.
- Class-based views вглубь
10 Кэширование, задачи и масштабирование
- Кэширование в Django
Фреймворк кэширования Django: бэкенды Redis и Memcached, кэш всей страницы, фрагмента шаблона и низкоуровневый cache API, ключи и инвалидация по сигналам.
- Фоновые задачи с Celery
Фоновые задачи Django через Celery: брокер и воркер, очереди и приоритеты, периодические задачи Celery Beat и идемпотентность задач.
- Производительность и безопасность
Производительность и безопасность Django: debug-toolbar, борьба с N+1, manage.py check --deploy и оборонительный чеклист CSRF, XSS и секретов.
- Тестирование Django
Тестирование Django: TestCase и тестовая БД, Client для запросов, фикстуры и factory_boy, что покрывать и как держать тесты быстрыми.
- Кэширование в Django