1. Цикл HTTP запиту та відповіді
В Django веб-застосунки працюють за допомогою циклу HTTP запиту-відповіді. Коли клієнт (наприклад, браузер) робить запит, Django обробляє його і повертає відповідь. Кроки такі:
- Запит клієнта: Браузер надсилає HTTP запит на сервер через URL.
- Маппінг URL: Django зіставляє URL з патернами, визначеними в
urls.py
. - Обробка виду: Підключений вид обробляє запит.
- Рендеринг шаблону: Якщо потрібно, вид рендерить HTML шаблон.
- Відповідь: Django повертає HTTP відповідь клієнту.
Цей цикл є основою для роботи застосунків Django.
2. Об’єкти запиту та відповіді
Django надає два основні об’єкти:
Об’єкт запиту
Об’єкт HttpRequest несе дані про запит:
request.method
: HTTP метод (GET, POST тощо).request.GET
: Параметри запиту для GET запитів.request.POST
: Дані, що були надіслані через форми.request.FILES
: Завантажені файли.request.COOKIES
: Кукі, надіслані браузером.request.META
: HTTP заголовки та метадані.
Об’єкт відповіді
Об’єкт HttpResponse використовується для відправки даних назад клієнту:
from django.http import HttpResponse
def example_view(request):
return HttpResponse("Hello, World!")
Типи відповідей, які часто використовуються:
- HttpResponseRedirect: Для редиректів.
- JsonResponse: Повертає дані у форматі JSON.
- Http404: Повертає помилку 404.
3. Регулярні вирази в URL
Django дозволяє співвідносити патерни URL за допомогою регулярних виразів. Це допомагає визначати динамічні шляхи.
Приклад:
from django.urls import re_path
from . import views
urlpatterns = [
re_path(r'^article/(?P[0-9]{4})/$', views.article),
]
(?P[0-9]{4})
: Співвідносить чотиризначний рік і передає його як параметрyear
.- Регулярні вирази дозволяють гнучко співвідносити URL для динамічних маршрутів.
4. Іменування URL та види
Іменування URL
Іменування дозволяє організовувати URL в більших проектах з кількома додатками.
Приклад:
# project/urls.py
from django.urls import include, path
urlpatterns = [
path('blog/', include('blog.urls', namespace='blog')),
]
# blog/urls.py
from django.urls import path
from . import views
app_name = 'blog'
urlpatterns = [
path('post//', views.post_detail, name='detail'),
]
Використання простору імен
View Post
Це дозволяє уникнути конфліктів URL і покращує читабельність.
5. Обробка помилок у видах
Django надає вбудовану обробку помилок і дозволяє налаштовувати її.
Стандартні сторінки помилок
- 404 Сторінка не знайдена: Викликається, коли жоден URL не відповідає запиту.
- 500 Внутрішня помилка сервера: Викликається у разі помилок на стороні сервера.
Користувацькі сторінки помилок
Ви можете створити власні шаблони, такі як 404.html
або 500.html
, у директорії шаблонів.
Користувацькі обробники помилок:
from django.http import HttpResponseNotFound
def custom_404(request, exception):
return HttpResponseNotFound("Сторінку не знайдено!")
Додати в налаштування:
handler404 = 'myapp.views.custom_404'
6. Класові види (CBVs)
Класові види (Class-Based Views) пропонують багаторазові та модульні варіанти видів, використовуючи класи Python.
Приклад CBV
from django.views import View
from django.http import HttpResponse
class HelloWorldView(View):
def get(self, request):
return HttpResponse("Hello, World!")
Переваги CBV
- Повторне використання: Використання міксинів та наслідування.
- Читабельність: Організований код.
- Гнучкість: Попередньо визначені види, як-от
ListView
іDetailView
, спрощують CRUD операції.
Попередньо визначені CBV
- TemplateView: Рендерить шаблони.
- ListView: Показує список об'єктів.
- DetailView: Показує деталі одного об'єкта.
- FormView: Обробляє відправку форм.
Висновок
Розуміння циклу запиту та відповіді в Django, обробки URL, видів і обробки помилок є важливим для створення масштабованих застосунків.
Використання таких функцій, як регулярні вирази (regular expressions), іменування URL (URL namespacing) та класові види (class-based views), покращує читабельність коду та його ефективність. Завдяки цій основі розробники можуть створювати надійні, модульні та зручні веб-застосунки в Django.
Перекладено з: Understanding HTTP Requests, Responses, and Views in Django