Middle
Обяснете как протича обработката на HTTP заявки в Django.
sobes.tech AI
Отговор от AI
Обработката на HTTP заявка в Django включва няколко основни етапа:
- WSGI сървър: Заявката идва към WSGI сървър (например Gunicorn, uWSGI), който е стандартният интерфейс между уеб сървърите и Python уеб приложенията.
wsgi.py: WSGI сървърът предава заявката към Django приложението чрез файлаwsgi.py, който обикновено се намира в кореновата директория на проекта. Този файл съдържа WSGI обекта на приложението.# wsgi.py import os from django.core.wsgi import get_wsgi_application os.environ.setdefault('DJANGO_SETTINGS_MODULE', '<your_project>.settings') application = get_wsgi_application() # WSGI обект на приложението- Middleware: Заявката преминава през конфигурираната middleware верига. Middleware е слой софтуер, който обработва заявките и отговорите. Той може да изпълнява автентикация, управление на сесии, обработка на заглавки и други функции.
# settings.py MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', # Ваши персонализирани middleware ] - Resolver на URL (
urls.py): След преминаване през middleware, Django определя кой View трябва да обработи заявката, базирайки се на URL шаблоните, дефинирани във файлаurls.pyна проекта.# urls.py (ниво на проекта) from django.contrib import admin from django.urls import path, include urlpatterns = [ path('admin/', admin.site.urls), path('my_app/', include('<my_app>.urls')), # Включване на URL-ите на приложението ]# urls.py (ниво на приложението) from django.urls import path from . import views urlpatterns = [ path('', views.index, name='index'), path('item/<int:item_id>/', views.detail, name='detail'), ] - View: Намереният URL шаблон е свързан с определена функция или клас View. Функцията View (или методът на класовия View) приема обект
HttpRequestкато аргумент и съдържа логиката за обработка на заявката.# views.py from django.shortcuts import render, get_object_or_400 from .models import Item def index(request): items = Item.objects.all() return render(request, 'my_app/index.html', {'items': items}) def detail(request, item_id): item = get_object_or_400(Item, pk=item_id) return render(request, 'my_app/detail.html', {'item': item}) - Model (по избор): View може да взаимодейства с модели (API към базата данни Django ORM) за получаване или запазване на данни.
# models.py from django.db import models class Item(models.Model): name = models.CharField(max_length=100) description = models.TextField() def __str__(self): return self.name - Шаблон (по избор): View може да използва шаблони на Django за генериране на HTML отговор.
<!-- my_app/templates/my_app/index.html --> <h1>Items</h1> <ul> {% for item in items %} <li><a href="{% url 'detail' item.id %}">{{ item.name }}</a></li> {% endfor %} </ul> - Отговор: View връща обект
HttpResponseили негов подклас (например,JsonResponse,RedirectResponse). Този обект съдържа тялото на отговора и свързаните заглавки. - Middleware (обратна верига): Обектът
HttpResponseпреминава обратно през същите middleware, които обработваха заявката. Middleware може да модифицира отговора преди да бъде изпратен на клиента. - WSGI сървър: Крайният отговор се изпраща на клиента от WSGI сървъра.