Middle
Django-da HTTP sorğularının işlənməsi necə baş verir, izah edin.
sobes.tech Süni İntellekt
AI-dan cavab
Django-da HTTP sorğusunun emalı əsas mərhələləri daxildir:
- WSGI serveri: Sorğu WSGI serverinə (məsələn, Gunicorn, uWSGI) gəlir, bu da veb serverlər və Python veb tətbiqləri arasında standart interfeysdir.
wsgi.py: WSGI serveri sorğunu Django tətbiqinəwsgi.pyfaylı vasitəsilə ötürür, adətən layihənin kök kataloqunda yerləşir. Bu fayl tətbiqin WSGI obyektini ehtiva edir.# 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() # Tətbiqin WSGI obyekti- Middleware: Sorğu konfiqurasiya olunmuş middleware zənciri vasitəsilə keçir. Middleware, sorğuları və cavabları emal edən proqram qatıdır. O, autentifikasiya, sessiya idarəetməsi, başlıqların işlənməsi və digər funksiyaları yerinə yetirə bilər.
# 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', # Özəl middleware ] - URL Resolver (
urls.py): Middleware-dən keçdikdən sonra Django,urls.pyfaylında müəyyən edilmiş URL şablonlarına əsaslanaraq hansı View-in sorğunu emal edəcəyini müəyyən edir.# urls.py (layihə səviyyəsində) from django.contrib import admin from django.urls import path, include urlpatterns = [ path('admin/', admin.site.urls), path('my_app/', include('<my_app>.urls')), # Tətbiqin URL-lərinin daxil edilməsi ]# urls.py (tətbiq səviyyəsində) from django.urls import path from . import views urlpatterns = [ path('', views.index, name='index'), path('item/<int:item_id>/', views.detail, name='detail'), ] - View: Tapılan URL şablonu müəyyən bir funksiya və ya sinif View ilə əlaqələndirilir. View funksiyası (və ya sinif əsaslı View metodu)
HttpRequestobyektini arqument kimi qəbul edir və sorğunun emalı loqikasını ehtiva edir.# 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 (əlavə): View, məlumatların əldə olunması və ya saxlanması üçün Django ORM bazası ilə API vasitəsilə modellərlə əlaqə qura bilər.
# 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 - Şablon (əlavə): View, HTML cavabını yaratmaq üçün Django şablonlarından istifadə edə bilər.
<!-- my_app/templates/my_app/index.html --> <h1>Məhsullar</h1> <ul> {% for item in items %} <li><a href="{% url 'detail' item.id %}">{{ item.name }}</a></li> {% endfor %} </ul> - Cavab: View,
HttpResponseobyektini və ya onun alt sinifini (məsələn,JsonResponse,RedirectResponse) qaytarır. Bu obyekt cavabın gövdəsini və əlaqəli başlıqları ehtiva edir. - Middleware (əks zəncir):
HttpResponseobyekti, sorğuları emal edən eyni middleware-lər vasitəsilə geri zəncirə daxil olur. Middleware cavabı göndərməzdən əvvəl dəyişdirə bilər. - WSGI serveri: Son cavab WSGI serveri tərəfindən müştəriyə göndərilir.