Частина II. Django Core¶
Django — це конвеєр: HTTP-запит проходить через middleware → URL dispatcher → view → response. Ця частина формує ментальну модель цього конвеєра.
Передумови: Частина I (HTTP). Рівень: Beginner.
Розділи¶
| Документ | Що вивчимо |
|---|---|
| Архітектура Django | MTV патерн, settings, INSTALLED_APPS, lifecycle overview |
| URL Routing | urlpatterns, path(), include(), name=, reverse(), namespace |
| Views | FBV vs CBV, request object, HttpResponse, render(), redirect() |
| Request Lifecycle | middleware pipeline, exception handling, response lifecycle |
| WSGI vs ASGI | sync vs async entrypoint, Daphne, ProtocolTypeRouter |
| Структура проєкту | де що лежить, settings split, manage.py |
| Management Commands | runserver, migrate, shell, createsuperuser, кастомні команди |
| Діаграми | Mermaid-схеми MTV, middleware, URL routing |
Ключові концепти¶
MTV (Model-Template-View):
Request lifecycle через middleware:
# settings.py MIDDLEWARE (порядок має значення)
[
"django.middleware.security.SecurityMiddleware", # HTTPS redirect, HSTS
"django.contrib.sessions.middleware.SessionMiddleware", # session → request.session
"django.middleware.common.CommonMiddleware",
"django.middleware.csrf.CsrfViewMiddleware", # CSRF token check
"django.contrib.auth.middleware.AuthenticationMiddleware", # session → request.user
"django.contrib.messages.middleware.MessageMiddleware",
]
URL routing:
# notes_project/urls.py
urlpatterns = [
path('admin/', admin.site.urls),
path('accounts/', include('django.contrib.auth.urls')),
path('', include('notes_app.urls')), # всі маршрути notes_app
]
# notes_app/urls.py
path('notes/', views.note_list, name='note_list'),
path('notes/<int:pk>/edit/', views.note_edit, name='note_edit'),
View:
# FBV — явний GET/POST
@login_required
def note_create(request):
if request.method == 'POST':
form = NoteForm(request.POST, user=request.user)
if form.is_valid():
note = services.create_note(user=request.user, **form.cleaned_data)
return redirect('note_detail', pk=note.pk) # PRG
else:
form = NoteForm(user=request.user)
return render(request, 'notes_app/note_form.html', {'form': form})
WSGI vs ASGI у Notes Chat App¶
| WSGI | ASGI | |
|---|---|---|
| Entrypoint | wsgi.py |
asgi.py |
| Server | Gunicorn, uWSGI | Daphne, Uvicorn |
| WebSocket | ❌ | ✅ |
| Async views | обмежено | ✅ |
| Notes Chat App | ✅ (використовує ASGI) | notes_project/asgi.py |
# notes_project/asgi.py
application = ProtocolTypeRouter({
"http": get_asgi_application(),
"websocket": AuthMiddlewareStack(URLRouter(websocket_urlpatterns)),
})
Де це у Notes Chat App¶
| Файл | Що показує |
|---|---|
notes_project/settings.py |
INSTALLED_APPS, MIDDLEWARE, DATABASES, CHANNEL_LAYERS |
notes_project/urls.py |
root URLconf — admin, accounts, include(notes_app.urls) |
notes_app/urls.py |
35+ маршрутів застосунку |
notes_app/views.py |
30+ FBV, всі з @login_required |
notes_project/asgi.py |
ASGI entrypoint з ProtocolTypeRouter |
Педагогічний зв'язок¶
Частина I: HTTP request → Django entrypoint (WSGI/ASGI)
Частина II: middleware → URL → view → response
Частина III: view → Model/ORM → DB
Частина IV: view → Form → validation → service
Частина V: view → Template → HTML
Zero to Hero: Крок 1 — перший urlpatterns і перший view. Крок 3 — розуміння thin view через selector + service.
Практика¶
- Додай URL
/hello/→ view що повертаєHttpResponse("Привіт!"). Перевір у браузері. - Змінити view щоб повертав
render(request, 'hello.html', {'name': 'World'}). Створи шаблон. - Виконай
python manage.py shell→from notes_app.models import Note; Note.objects.count(). - Подивись у DevTools на CSRF-token у POST-запиті до форми.
Контрольні питання¶
- Що таке MTV і чим він відрізняється від MVC? Де у Django "Controller"?
- Що відбувається якщо middleware повертає
HttpResponseбез викликуget_response? - Чому
SecurityMiddlewareповинен бути першим уMIDDLEWARE? - Що таке PRG (Post-Redirect-Get)? Навіщо він потрібен?
- Яка різниця між
render()іredirect()? - Коли варто використовувати CBV замість FBV?
- Чому Notes Chat App використовує ASGI замість WSGI?
Далі → Частина III. Models, Database та ORM — де зберігаються дані.