Middle
Magyarázza el, hogyan történik a HTTP-kérések feldolgozása a Django-ban.
sobes.tech MI
Válasz az MI-től
A HTTP-kérések feldolgozása Django-ban több fő lépést foglal magában:
- WSGI szerver: A kérés a WSGI szerverhez érkezik (pl. Gunicorn, uWSGI), amely a web szerverek és a Python webalkalmazások közötti szabványos interfész.
wsgi.py: A WSGI szerver átadja a kérést a Django alkalmazásnak awsgi.pyfájlon keresztül, amely általában a projekt gyökérkönyvtárában található. Ez a fájl tartalmazza az alkalmazás WSGI objektumát.# 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 objektum- Middleware: A kérés átmegy a konfigurált middleware láncon. A middleware egy szoftverréteg, amely a kéréseket és válaszokat dolgozza fel. Felhasználható hitelesítésre, munkamenetek kezelésére, fejlécfeldolgozásra és más funkciókra.
# 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', # Saját middleware ] - URL Resolver (
urls.py): A middleware feldolgozása után a Django meghatározza, melyik View fogja kezelni a kérést azurls.pyfájlban megadott URL-sablonok alapján.# urls.py (projekt szint) from django.contrib import admin from django.urls import path, include urlpatterns = [ path('admin/', admin.site.urls), path('my_app/', include('<my_app>.urls')), # Az alkalmazás URL-jeinek beillesztése ]# urls.py (alkalmazás szint) from django.urls import path from . import views urlpatterns = [ path('', views.index, name='index'), path('item/<int:item_id>/', views.detail, name='detail'), ] - View: A megtalált URL-sablon egy adott függvényhez vagy osztályhoz van kötve. A View-függvény (vagy osztály alapú View-módszer) megkapja az
HttpRequestobjektumot argumentumként, és tartalmazza a kérés feldolgozási logikáját.# 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 (opcionális): A View kapcsolatba léphet modellekkel (API a Django ORM adatbázishoz) az adatok lekérdezéséhez vagy mentéséhez.
# 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 - Sablon (opcionális): A View használhat Django sablonokat az HTML-válasz generálásához.
<!-- 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> - Válasz: A View visszaad egy
HttpResponseobjektumot vagy annak származékát (pl.JsonResponse,RedirectResponse). Ez az objektum tartalmazza a válasz testét és a kapcsolódó fejlécsorokat. - Middleware (fordított lánc): A
HttpResponseobjektum visszafelé halad ugyanazon middleware-eken keresztül, amelyek a kérést feldolgozták. A middleware módosíthatja a választ, mielőtt az elküldésre kerül a kliensnek. - WSGI szerver: A végső válasz a WSGI szerver által kerül elküldésre a kliensnek.