Sobes.tech
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:

  1. 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.
  2. wsgi.py: WSGI serveri sorğunu Django tətbiqinə wsgi.py faylı 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
    
  3. 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
    ]
    
  4. URL Resolver (urls.py): Middleware-dən keçdikdən sonra Django, urls.py faylı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'),
    ]
    
  5. 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) HttpRequest obyektini 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})
    
  6. 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
    
  7. Ş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>
    
  8. Cavab: View, HttpResponse obyektini 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.
  9. Middleware (əks zəncir): HttpResponse obyekti, 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.
  10. WSGI serveri: Son cavab WSGI serveri tərəfindən müştəriyə göndərilir.