Структура репозиторію¶
Розуміти де що лежить — базовий навик роботи з будь-яким Django проєктом. Тут — карта
notes_chat_app: кожна директорія і найважливіші файли.
Повне дерево¶
notes_chat_app/
│
├── notes_project/ ← Django project package
│ ├── settings.py ← вся конфігурація (DB, INSTALLED_APPS, MIDDLEWARE...)
│ ├── urls.py ← головний URL router (підключає notes_app.urls)
│ ├── asgi.py ← ASGI entrypoint (HTTP + WebSocket)
│ ├── wsgi.py ← WSGI (НЕ використовується, тільки для сумісності)
│ ├── routing.py ← WebSocket URL patterns
│ └── celery.py ← Celery application instance
│
├── notes_app/ ← Django app — вся бізнес-логіка
│ ├── models.py ← 10 моделей (Note, Tag, Notebook, TodoList...)
│ ├── views.py ← FBV view функції (note_list, note_create...)
│ ├── urls.py ← URL patterns для notes_app
│ ├── forms.py ← ModelForm класи (NoteForm, TodoForm...)
│ ├── services.py ← мутуючі операції (create_note, delete_tag...)
│ ├── selectors.py ← read-only QuerySets (get_user_notes, ...)
│ ├── consumers.py ← WebSocket Consumer (GroupChatConsumer)
│ ├── tasks.py ← Celery tasks (reminder notifications...)
│ ├── admin.py ← Django Admin реєстрація моделей
│ ├── apps.py ← AppConfig
│ ├── context_processors.py ← глобальні контекстні змінні для шаблонів
│ ├── management/
│ │ └── commands/
│ │ └── seed_demo_data.py ← команда для заповнення демо-даними
│ ├── migrations/ ← файли міграцій (автогенеровані)
│ ├── static/
│ │ └── notes_app/
│ │ ├── css/style.css
│ │ └── js/
│ │ ├── group_chat.js ← WebSocket клієнт (JS)
│ │ └── reminders.js ← SSE для нагадувань
│ └── tests/
│ ├── test_models.py ← юніт тести моделей
│ ├── test_services.py ← юніт тести сервісів
│ ├── test_forms.py ← юніт тести форм
│ ├── test_views.py ← інтеграційні тести views
│ ├── test_consumers.py ← тести WebSocket Consumer
│ └── test_selenium.py ← E2E Selenium тести
│
├── templates/ ← project-level шаблони
│ ├── base.html ← базовий layout (navbar, sidebar, messages)
│ └── notes_app/ ← app-level шаблони
│ ├── note_list.html
│ ├── note_detail.html
│ ├── note_form.html
│ └── ...
│
├── nginx/
│ └── nginx.conf ← nginx конфігурація (static files, WebSocket proxy)
│
├── docs/ ← вся документація (цей сайт!)
│ ├── 00_getting_started/ ← ти тут
│ ├── 01_web_foundations/ ... ← теоретичні розділи
│ ├── tutorials/ ← Zero to Hero кроки 1-9
│ └── 12_final_project/ ← документація фінального проєкту
│
├── Dockerfile ← образ Django контейнера
├── docker-compose.yml ← весь стек (db, redis, web, nginx, ngrok, selenium)
├── entrypoint.sh ← migrate → collectstatic → seed → uvicorn
├── requirements.txt ← Python залежності
├── .env.example ← шаблон змінних середовища
├── mkdocs.yml ← конфігурація документації (цей сайт)
└── manage.py ← Django CLI entrypoint
Ключові файли і їх роль¶
notes_project/settings.py — серце конфігурації¶
# Тут живе все важливе:
DATABASES = {...} # PostgreSQL підключення через DATABASE_URL
INSTALLED_APPS = [
'daphne', # ПЕРШИЙ — overrides runserver для ASGI
'channels',
'notes_app',
...
]
CHANNEL_LAYERS = {...} # Redis для WebSocket broadcast
MIDDLEWARE = [...] # ланцюг обробки запитів
TEMPLATES = [...] # де шукати .html шаблони
STATIC_ROOT = ... # куди collectstatic збирає файли
notes_project/asgi.py — точка входу для ASGI¶
# HTTP і WebSocket через один процес:
application = ProtocolTypeRouter({
'http': django_asgi_app, # → Django views
'websocket': AuthMiddlewareStack(
URLRouter(websocket_urlpatterns) # → GroupChatConsumer
),
})
notes_app/models.py — всі моделі проєкту¶
Тут живуть: Note, Tag, Notebook, Reminder, TodoList, TodoItem, ShoppingList, ShopItem, UserProfile, ChatMessage.
notes_app/views.py + selectors.py + services.py — рівні архітектури¶
HTTP Request → views.py (координація) → selectors.py (читання з БД)
→ services.py (запис у БД)
→ render(template)
Що НЕ редагувати¶
staticfiles/ ← результат collectstatic, автогенерований (ігнорується git)
.venv/ ← virtual environment (якщо є локальний), не для редагування
__pycache__/ ← Python bytecode, автогенерований
migrations/ ← не редагувати вручну, тільки через makemigrations
Де шукати по темах¶
| Хочу знайти | Де дивитися |
|---|---|
| URL для конкретної сторінки | notes_app/urls.py |
| Логіку обробки запиту | notes_app/views.py |
| Запит до БД | notes_app/selectors.py |
| Операцію зміни даних | notes_app/services.py |
| Структуру моделі | notes_app/models.py |
| HTML сторінки | templates/notes_app/ |
| WebSocket логіку | notes_app/consumers.py |
| JavaScript WebSocket клієнт | notes_app/static/notes_app/js/group_chat.js |
| Конфігурацію Docker | docker-compose.yml |
| Конфігурацію nginx | nginx/nginx.conf |
Практичне завдання¶
Знайди в редакторі ці файли і відкрий кожен:
notes_project/settings.py→ знайдиINSTALLED_APPSі подивись порядокnotes_app/models.py→ порахуй скільки моделей єnotes_app/views.py→ знайди функціюnote_listnotes_app/selectors.py→ знайдиget_user_notesdocker-compose.yml→ порахуй скільки сервісів є
Далі¶
→ Крок 1. Hello Django — починаємо будувати