Middle
Izskaidrojiet, kā notiek HTTP pieprasījumu apstrāde Django.
sobes.tech AI
Atbilde no AI
HTTP pieprasījuma apstrāde Django ietver vairākus galvenos posmus:
- WSGI serveris: Pieprasījums nonāk WSGI serverī (piemēram, Gunicorn, uWSGI), kas ir standarta saskarne starp tīmekļa serveriem un Python tīmekļa lietojumprogrammām:
wsgi.py: WSGI serveris nodod pieprasījumu Django lietojumprogrammai caurwsgi.pyfailu, kas parasti atrodas projekta saknes direktorijā. Šajā failā ir WSGI objekts:# 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 objekts- Middleware: Pieprasījums tiek apstrādāts ar konfigurētu middleware ķēdi. Middleware ir programmatūras slānis, kas apstrādā pieprasījumus un atbildes. Tie var veikt autentifikāciju, sesiju pārvaldību, galvenes un citas funkcijas:
# 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', # Jūsu pielāgotie middleware ] - URL risinātājs (
urls.py): Pēc middleware apstrādes Django nosaka, kurš View jāapstrādā pieprasījums, balstoties uz URL šabloniem, kas ir definētiurls.pyfailā:# urls.py (projekta līmenī) from django.contrib import admin from django.urls import path, include urlpatterns = [ path('admin/', admin.site.urls), path('my_app/', include('<my_app>.urls')), # Programmas URL iekļaušana ]# urls.py (lietojuma līmenī) from django.urls import path from . import views urlpatterns = [ path('', views.index, name='index'), path('item/<int:item_id>/', views.detail, name='detail'), ] - View: Atrodot URL šablonu, tas ir saistīts ar noteiktu funkciju vai klases balstītu View. View funkcija (vai klases balstīta View metode) pieņem
HttpRequestobjektu kā argumentu un satur pieprasījuma apstrādes loģiku:# 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}) - Modelis (pēc izvēles): View var sadarboties ar modeļiem (Django ORM API), lai iegūtu vai saglabātu datus:
# 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 - Šablons (pēc izvēles): View var izmantot Django šablonus, lai ģenerētu HTML atbildi:
<!-- 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> - Atbilde: View atgriež
HttpResponseobjektu vai tā apakšklasi (piemēram,JsonResponse,RedirectResponse). Šis objekts satur atbildes ķermeni un saistītās galvenes: - Middleware (atpakaļgaitas ķēde):
HttpResponseobjekts atgriežas atpakaļ caur to pašu middleware, kas apstrādāja pieprasījumu. Middleware var modificēt atbildi pirms tā tiek nosūtīta klientam: - WSGI serveris: Galīgā atbilde tiek nosūtīta WSGI serverim klientam.