Middle
Vysvetlite, ako prebieha spracovanie HTTP požiadaviek v Django.
sobes.tech AI
Odpoveď od AI
Spracovanie HTTP požiadavky v Django zahŕňa niekoľko hlavných krokov:
- WSGI server: Požiadavka prichádza na WSGI server (napríklad Gunicorn, uWSGI), ktorý je štandardným rozhraním medzi webovými servermi a Python webovými aplikáciami.
wsgi.py: WSGI server prenáša požiadavku na Django aplikáciu prostredníctvom súboruwsgi.py, ktorý sa zvyčajne nachádza v koreňovom adresári projektu. Tento súbor obsahuje WSGI objekt aplikácie.# 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 aplikácie- Middleware: Požiadavka prechádza reťazcom nakonfigurovaného middleware. Middleware je vrstva softvéru, ktorá spracováva požiadavky a odpovede. Môže vykonávať autentifikáciu, správu relácií, spracovanie hlavičiek a ďalšie funkcie.
# 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', # Vlastné middleware ] - Resolver URL (
urls.py): Po prechode middleware, Django určuje, ktorý View má spracovať požiadavku na základe URL šablón definovaných v súboreurls.pyprojektu.# urls.py (úroveň projektu) from django.contrib import admin from django.urls import path, include urlpatterns = [ path('admin/', admin.site.urls), path('my_app/', include('<my_app>.urls')), # Zahrnutie URL-ov aplikácie ]# urls.py (úroveň aplikácie) from django.urls import path from . import views urlpatterns = [ path('', views.index, name='index'), path('item/<int:item_id>/', views.detail, name='detail'), ] - View: Nájditeľný URL vzor je spojený s určenou funkciou alebo triedou View. Funkcia View (alebo metóda triedy založenej na View) prijíma objekt
HttpRequestako argument a obsahuje logiku spracovania požiadavky.# 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 (voliteľné): View môže komunikovať s modelmi (API k databáze Django ORM) pre získanie alebo uloženie dát.
# 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 - Šablóna (voliteľná): View môže používať šablóny Django na generovanie HTML odpovede.
<!-- 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> - Odpoveď: View vracia objekt
HttpResponsealebo jeho podtriedu (napríklad,JsonResponse,RedirectResponse). Tento objekt obsahuje telo odpovede a súvisiace hlavičky. - Middleware (opačný reťazec): Objekt
HttpResponseprechádza späť rovnakým middleware, ktorý spracovával požiadavku. Middleware môže upraviť odpoveď pred jej odoslaním klientovi. - WSGI server: Konečná odpoveď je odoslaná klientovi WSGI serverom.