Итоги работы
Что мы сделали
За первую часть проекта блог уже работает:
- Проект и приложение.
mysite+blog, приложение подключено черезBlogConfig, язык — русский. - Модель
Post. Заголовок, слаг, автор черезAUTH_USER_MODEL, текст, датыpublish/created/updated, статус наTextChoices, сортировка и индекс вMeta. - Админка.
PostAdminс колонками, фильтрами, поиском, автозаполнением слага,raw_id_fieldsи иерархией дат. - Менеджер.
Post.publishedвозвращает только опубликованные посты. - Представления.
post_listиpost_detail(404 для черновиков и несуществующих постов). - Маршруты. Пространство имён
blog,get_absolute_url()у модели. - Шаблоны. Наследование от
blog/base.html, фильтрыtruncatewords,linebreaks,date, статика.
Карта проекта
mysite/urls.py ──include──▶ blog/urls.py
├── "" → views.post_list → post/list.html
└── "<int:id>/" → views.post_detail → post/detail.html
│
Post.published (PublishedManager)
│
blog_post (БД)
Чек-лист самопроверки
- [ ] Понимаю, зачем ссылаться на пользователя через
settings.AUTH_USER_MODEL. - [ ] Знаю разницу между
auto_now,auto_now_addиdefault=timezone.now. - [ ] Могу объяснить, почему при своём менеджере надо явно объявить
objects. - [ ] Понимаю, почему
post_detailищет только среди опубликованных. - [ ] Умею наследовать шаблоны и пользоваться фильтрами.
Что дальше
Во второй части блога сделаем его «настоящим»:
- красивые адреса с датой и слагом;
- постраничную навигацию;
- представления-классы;
- отправку поста по email;
- комментарии, теги и похожие посты;
- свои шаблонные теги, карту сайта;
- PostgreSQL и полнотекстовый поиск.
Если что-то из чек-листа вызывает сомнения — вернитесь к соответствующему уроку, а затем закрепите знания заданиями ниже.
Практика решено 0 из 6
Восстановите порядок работы над первой частью блога.
-
Сверстали шаблоны
base.html,list.html,detail.html -
Зарегистрировали модель в админке и настроили
PostAdmin -
Написали менеджер
PublishedManager -
Создали представления
post_listиpost_detailи маршруты -
Описали модель
Postи применили миграции -
Создали проект
mysiteи приложениеblog
Какой код вернёт только опубликованные посты 2026 года?
Что произойдёт, если удалить пользователя-автора, у которого есть посты (on_delete=models.CASCADE)?
Контрольное задание. Напишите метод get_absolute_url модели Post,
который возвращает адрес маршрута blog:post_detail с аргументом self.id.
from django.urls import reverse
class Post(models.Model):
...
def get_absolute_url(self):
return reverse("blog:post_detail", args=[self.id])
Какой командой посмотреть SQL, который выполнит миграция 0001 приложения blog?
Добавьте через админку 5 постов (3 опубликованных и 2 черновика) и убедитесь, что на сайте видны только опубликованные. Нажмите, когда проверите.
Войдите, чтобы отмечать пройденные уроки.