Крок 3. CRUD і архітектура¶
Навчальний проєкт:
notes_project— standalone застосунок, що починає з SQLite і переходить на PostgreSQL. Це третій крок еволюції. Ти проходиш повний цикл: від проектування домену до готового застосунку з архітектурою Services & Selectors.
Передумови
Перед початком переконайся, що пройдені:
- Крок 1. Hello Django — базовий Django-проєкт, перший
HttpResponse - Крок 2. Bootstrap Notes — ModelForm, PRG, Bootstrap CRUD
Навчальний стан vs Notes Chat App¶
| notes_project (цей крок) | notes_chat_app (кінцева мета) | |
|---|---|---|
| Проєкт | Standalone (SQLite → PostgreSQL) | Docker + PostgreSQL |
| Auth | Немає / базовий @login_required |
@login_required, Groups, sharing |
| Моделі | 9 моделей: UserProfile, Tag, Notebook, Note, Reminder, TodoList, TodoItem, ShoppingList, ShopItem | Ті самі + Group (Django built-in) + ChatMessage |
| Views | FBV + selectors + services | FBV/CBV + selectors + services |
| Архітектура | Services & Selectors | Services & Selectors (ідентично) |
| Зв'язки | 1:1, 1:N, M:N — всі типи | Ті самі + Group M:N для sharing |
Результат кроку¶
Після завершення цього кроку в тебе буде:
http://localhost:8000/ → Index
http://localhost:8000/notes/ → Список нотаток (пошук, фільтри, теги)
http://localhost:8000/notes/new/ → Форма створення нотатки
http://localhost:8000/notes/1/ → Деталь нотатки (з нагадуваннями)
http://localhost:8000/notes/1/edit/ → Форма редагування
http://localhost:8000/notes/1/delete/ → Підтвердження видалення (POST only)
http://localhost:8000/notebooks/ → Список записників
http://localhost:8000/notebooks/new/ → Новий записник
http://localhost:8000/tags/new/ → Новий тег
http://localhost:8000/admin/ → Django Admin (з select_related)
Що ти вивчиш¶
- 7-крокова методологія проектування БД: Домен → Сутності → Атрибути → Зв'язки → Нормалізація → on_delete → Django Модель
- ER-діаграми — усі типи зв'язків: 1:1, 1:N, M:N
- Services & Selectors — архітектурний поділ шарів відповідальності
selectors.py— тільки SELECT-запити з оптимізацієюservices.py— CREATE / UPDATE / DELETE зtransaction.atomic()- N+1 проблема і вирішення:
select_related,prefetch_related transaction.atomic(),F(),select_for_update()- Class-Based Views (CBV) —
LoginRequiredMixin,UserQuerySetMixin,ListView,CreateView,UpdateView,DeleteView - Перехід з SQLite на PostgreSQL через Docker
Порядок читання¶
- Проектування домену — 7-крокова методологія, де живе правда, аналіз вимог
- ER-діаграми — типи зв'язків, on_delete матриця, повна схема 11 таблиць
- Django моделі — повний код усіх моделей, ORM QuerySet API
- Міграції — Migration Lifecycle, DAG залежностей, перший запуск з SQLite
- Services і Selectors — архітектура шарів, READ/WRITE flow, повний код
- QuerySet глибоко — нормалізація, N+1, select_related, prefetch_related, F(), transactions
- PostgreSQL — Docker, налаштування Django, перенесення даних
- Class-Based Views — CBV vs FBV, Generic Views, Mixins, хуки
- Чекпоінт — чеклист, типові помилки, практичне завдання