Middle
Paaiškinkite, kaip vyksta HTTP užklausų apdorojimas Django.
sobes.tech AI
Atsakymas iš AI
HTTP užklausos apdorojimas Django apima keletą pagrindinių etapų:
- WSGI serveris: Užklausa atkeliauja į WSGI serverį (pavyzdžiui, Gunicorn, uWSGI), kuris yra standartinis sąsajos taškas tarp žiniatinklio serverių ir Python žiniatinklio programų:
wsgi.py: WSGI serveris perduoda užklausą Django programai perwsgi.pyfailą, kuris paprastai yra projekto pagrindiniame kataloge. Šiame faile yra WSGI objektas:# 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 objektas- Middleware: Užklausa pereina per sukonfigūruotą middleware grandinę. Middleware yra programinis sluoksnis, kuris apdoroja užklausas ir atsakymus. Jie gali atlikti autentifikaciją, sesijų valdymą, antraščių apdorojimą ir kitas funkcijas:
# 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', # Jūsų papildomi middleware ] - URL resolveris (
urls.py): Po middleware, Django nustato, kuris View turi apdoroti užklausą, remiantis URL šablonais, kurie yra apibrėžtiurls.pyfaile:# urls.py (projekto lygmenyje) from django.contrib import admin from django.urls import path, include urlpatterns = [ path('admin/', admin.site.urls), path('my_app/', include('<my_app>.urls')), # Programos URL įtraukimas ]# urls.py (programos lygmenyje) from django.urls import path from . import views urlpatterns = [ path('', views.index, name='index'), path('item/<int:item_id>/', views.detail, name='detail'), ] - View: Surastas URL šablonas yra susijęs su tam tikra funkcija arba klasės pagrindu sukurta View. View funkcija (arba klasės pagrindu sukurta View metodas) priima
HttpRequestobjektą kaip argumentą ir turi užklausos apdorojimo logiką:# 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}) - Modelis (pasirinktinai): View gali sąveikauti su modeliais (Django ORM API) duomenų gavimui arba išsaugojimui:
# 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 - Šablonas (pasirinktinai): View gali naudoti Django šablonus HTML atsakymui generuoti:
<!-- 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> - Atsakymas: View grąžina
HttpResponseobjektą arba jo pogrupį (pavyzdžiui,JsonResponse,RedirectResponse). Šis objektas turi atsakymo turinį ir susijusias antraštes: - Middleware (atvirkštinė grandinė):
HttpResponseobjektas pereina atgal per tą pačią middleware grandinę, kuri apdorojė užklausą. Middleware gali modifikuoti atsakymą prieš jį siunčiant klientui: - WSGI serveris: Galutinis atsakymas siunčiamas WSGI serveriui klientui.