Middle
Leg uit hoe de verwerking van HTTP-verzoeken in Django plaatsvindt.
sobes.tech AI
Antwoord van AI
De verwerking van een HTTP-verzoek in Django omvat verschillende hoofd fasen:
- WSGI-server: Het verzoek komt bij de WSGI-server (bijvoorbeeld Gunicorn, uWSGI) die de standaard interface is tussen webservers en Python webapplicaties.
wsgi.py: De WSGI-server geeft het verzoek door aan de Django-toepassing via het bestandwsgi.py, meestal gelegen in de hoofdmap van het project. Dit bestand bevat het WSGI-object van de toepassing.# 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-object van de toepassing- Middleware: Het verzoek doorloopt een keten van geconfigureerde middleware. Middleware is een softwarelaag die verzoeken en antwoorden verwerkt. Ze kunnen authenticatie, sessiebeheer, headerverwerking en andere functies uitvoeren.
# 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', # Jouw aangepaste middleware ] - URL Resolver (
urls.py): Na het passeren van middleware, bepaalt Django welke View de aanvraag moet verwerken op basis van de URL-patronen gedefinieerd inurls.pyvan het project.# urls.py (projectniveau) from django.contrib import admin from django.urls import path, include urlpatterns = [ path('admin/', admin.site.urls), path('my_app/', include('<my_app>.urls')), # Insluiten van URL's van de app ]# urls.py (app-niveau) from django.urls import path from . import views urlpatterns = [ path('', views.index, name='index'), path('item/<int:item_id>/', views.detail, name='detail'), ] - View: Het gevonden URL-patroon is gekoppeld aan een specifieke functie of klasse View. De View-functie (of methode van de klasse-gebaseerde View) ontvangt een
HttpRequestobject als argument en bevat de logica voor het verwerken van de aanvraag.# 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}) - Model (optioneel): De View kan interageren met modellen (API naar Django ORM database) om gegevens op te halen of op te slaan.
# 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 (optioneel): De View kan Django-templates gebruiken om de HTML-respons te genereren.
<!-- 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> - Respons: De View retourneert een
HttpResponseobject of een subklasse ervan (bijvoorbeeld,JsonResponse,RedirectResponse). Dit object bevat de body van de reactie en de bijbehorende headers. - Middleware (omgekeerde keten): Het
HttpResponse-object doorloopt dezelfde middleware in omgekeerde volgorde die de aanvraag heeft verwerkt. Middleware kan de reactie aanpassen voordat deze naar de client wordt gestuurd. - WSGI-server: Het uiteindelijke antwoord wordt verzonden naar de client via de WSGI-server.