Middle
Explique comment le traitement des requêtes HTTP se déroule dans Django.
sobes.tech IA
Réponse de l'IA
Le traitement d'une requête HTTP dans Django comprend plusieurs étapes principales:
- Serveur WSGI : La requête arrive au serveur WSGI (par exemple, Gunicorn, uWSGI), qui est l'interface standard entre les serveurs web et les applications web Python.
wsgi.py: Le serveur WSGI transmet la requête à l'application Django via le fichierwsgi.py, généralement situé dans le répertoire racine du projet. Ce fichier contient l'objet WSGI de l'application.# 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() # Objet WSGI de l'application- Middleware : La requête passe par une chaîne de middleware configurés. Le middleware est une couche logicielle qui traite les requêtes et réponses. Ils peuvent effectuer une authentification, une gestion des sessions, un traitement des en-têtes et d'autres fonctions.
# 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', # Vos middleware personnalisés ] - Résolveur d'URL (
urls.py) : Après le passage par le middleware, Django détermine quelle Vue doit traiter la requête, en se basant sur les modèles d'URL définis dansurls.pydu projet.# urls.py (niveau du projet) from django.contrib import admin from django.urls import path, include urlpatterns = [ path('admin/', admin.site.urls), path('my_app/', include('<my_app>.urls')), # Inclusion des URLs de l'application ]# urls.py (niveau de l'application) from django.urls import path from . import views urlpatterns = [ path('', views.index, name='index'), path('item/<int:item_id>/', views.detail, name='detail'), ] - Vue : Le modèle d'URL trouvé est associé à une fonction ou classe Vue spécifique. La fonction Vue (ou méthode de la Vue basée sur une classe) reçoit un objet
HttpRequesten argument et contient la logique de traitement de la requête.# views.py from django.shortcuts import render, get_object_or_404 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_404(Item, pk=item_id) return render(request, 'my_app/detail.html', {'item': item}) - Modèle (optionnel) : La Vue peut interagir avec des modèles (API à la base de données Django ORM) pour obtenir ou sauvegarder des données.
# 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 - Template (optionnel) : La Vue peut utiliser des modèles Django pour générer la réponse 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> - Réponse : La Vue retourne un objet
HttpResponseou sa sous-classe (par exemple,JsonResponse,RedirectResponse). Cet objet contient le corps de la réponse et les en-têtes associés. - Middleware (chaîne inverse) : L'objet
HttpResponsepasse par la chaîne inverse à travers le même middleware qui a traité la requête. Les middleware peuvent modifier la réponse avant qu'elle ne soit envoyée au client. - Serveur WSGI : La réponse finale est envoyée au client via le serveur WSGI.