Итоги работы

⏱ 15 мин · 🧩 заданий: 5

Что мы построили

За первую часть проекта «Сайт статей» у нас появился полноценный многопользовательский сайт:

Этап Что сделали
Структура Проект backend, приложения в папке modules/, общий код в modules/services/
Модели Article с менеджером custom, статусом, закреплением, автором и редактором
Категории Дерево на MPTTModel, меню через recursetree
Представления ListView, DetailView, CreateView, UpdateView, DeleteView
Слаги unique_slugify с транслитерацией кириллицы (unidecode)
Оптимизация select_related, Debug Toolbar, assertNumQueries
Профили Profile + сигнал post_save, страница и редактирование профиля
Права LoginRequiredMixin, свой AuthorRequiredMixin, UserIsNotAuthenticated
Авторизация Регистрация с подтверждением email, вход по email, сброс пароля

Ключевые идеи

CBV — это конструктор из миксинов. Мы почти не писали обработку GET/POST руками: переопределяли точечные методы — get_queryset(), get_context_data(), form_valid(), get_object(), get_success_url().

Права проверяются на сервере. Шаблон лишь прячет кнопки; защищает миксин в dispatch().

Сигналы — для слабосвязанных реакций. Профиль создаётся при любом способе регистрации, но основную логику держим явной.

Сначала измеряй, потом оптимизируй. Debug Toolbar показывает N+1, select_related его убирает, тест фиксирует результат.

Чек-лист перед второй частью

Проверьте, что у вас работает:

  • главная со списком статей, пагинацией и деревом категорий;
  • страница категории со статьями всех вложенных подкатегорий;
  • детальная страница статьи по кириллическому заголовку → латинский слаг;
  • регистрация → письмо в консоли → активация по ссылке → вход;
  • добавление статьи, редактирование только своей, удаление с подтверждением;
  • страница профиля и редактирование профиля с аватаром.

Во второй части добавим древовидные комментарии на AJAX, теги, капчу, визуальный редактор, лайки, RSS, кеширование, статус «онлайн» и свои страницы ошибок.

Практика решено 0 из 5

Вы не вошли — ответы проверяются, но прогресс не сохранится. Войти или зарегистрироваться.
Задание 1 Расставить по порядку

Расположите этапы добавления статьи пользователем в порядке выполнения в CreateView (POST):

  1. form.is_valid()
  2. Форма создаётся с request.POST и request.FILES
  3. Редирект на get_absolute_url() статьи
  4. LoginRequiredMixin.dispatch() проверяет вход
  5. form_valid(): form.instance.author = request.user, сохранение
Задание 2 Один вариант ответа

Какой инструмент выбрать для дерева категорий с вложенностью любой глубины?

Задание 3 Несколько вариантов

Что защищает чужую статью от редактирования?

Задание 4 Ввод ответа

Каким методом queryset подгрузить автора и категорию статьи одним SQL-запросом (JOIN)? Только имя метода.

Задание 5 Написать код

Соберите маршруты статей в правильном порядке: home (""), articles_create ("articles/create/"), articles_update ("articles//update/"), articles_detail ("articles//"). Создание должно стоять выше детальной страницы.

Войдите, чтобы отмечать пройденные уроки.