Middle
Selgitage, kuidas toimub HTTP-päringute töötlemine Django's.
sobes.tech AI
Vastus AI-lt
HTTP-päringu töötlemine Django-s hõlmab mitmeid põhietappe:
- WSGI server: Päring jõuab WSGI serverisse (näiteks Gunicorn, uWSGI), mis on standardliides veebiserverite ja Python-veebirakenduste vahel:
wsgi.py: WSGI server edastab päringu Django rakenduselewsgi.pyfaili kaudu, mis asub tavaliselt projekti põhikataloogis. Selles failis on WSGI objekt:# 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 objekt- Middleware: Päring läbib konfigureeritud middleware ahela. Middleware on tarkvarakiht, mis töötleb päringuid ja vastuseid. Nad võivad teostada autentimist, sessioonide haldust, päiste töötlemist ja muid funktsioone:
# 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', # Teie kohandatud middleware ] - URL-i lahendaja (
urls.py): Pärast middleware läbimist määrab Django, milline View peaks päringut töötlema, tuginedesurls.pyfailis määratletud URL-mustritele:# urls.py (projekti tasemel) from django.contrib import admin from django.urls import path, include urlpatterns = [ path('admin/', admin.site.urls), path('my_app/', include('<my_app>.urls')), # Rakenduse URL-ide kaasamine ]# urls.py (rakenduse tasemel) from django.urls import path from . import views urlpatterns = [ path('', views.index, name='index'), path('item/<int:item_id>/', views.detail, name='detail'), ] - View: Leidnud URL-mustri, see on seotud kindla funktsiooni või klassipõhise View-iga. View-funktsioon (või klassipõhine View meetod) võtab argumendina
HttpRequestobjekti ja sisaldab päringu töötlemise loogikat:# 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}) - Mudel (valikuline): View võib suhelda mudelitega (Django ORM API kaudu), et saada või salvestada andmeid:
# 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 - Mall (valikuline): View võib kasutada Django malle HTML-vastuse genereerimiseks:
<!-- 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> - Vastus: View tagastab
HttpResponseobjekti või selle alamtüübi (näiteksJsonResponse,RedirectResponse). See objekt sisaldab vastuse keha ja seotud päiseid: - Middleware (tagasipööratud ahel):
HttpResponseobjekt läbib tagasi sama middleware ahela, mis töötles päringut. Middleware võib muuta vastust enne selle saatmist kliendile: - WSGI server: Lõplik vastus saadetakse WSGI serverile kliendile.