Sobes.tech
Middle

Ներկայացրեք, թե ինչպես է տեղի ունենում HTTP հարցումների մշակումը Django-ում։

sobes.tech AI

Պատասխան AI-ից

HTTP հարցման մշակումը Django-ում ներառում է մի քանի հիմնական փուլեր:

  1. WSGI սերվեր: Հարցումը գալիս է WSGI սերվերին (օրինակ՝ Gunicorn, uWSGI), որը հանդիսանում է ստանդարտ ինտերֆեյսը վեբ սերվերների և Python վեբ հավելվածների միջև:
  2. wsgi.py: WSGI սերվերը փոխանցում է հարցումը Django հավելվածին wsgi.py ֆայլի միջոցով, որը սովորաբար գտնվում է նախագծի հիմնական թղթապանակում: Այս ֆայլը պարունակում է WSGI օբյեկտը:
    # 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 օբյեկտը
    
  3. Middleware: Հարցումը անցնում է կարգավորած middleware շղթայով: Middleware-ն ծրագրային շերտ է, որը մշակում է հարցումները և պատասխանները: Նրանք կարող են իրականացնել նույնականացում, սեսիայի կառավարում, գլխագրերի մշակում և այլ գործառույթներ:
    # 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',
        # Ձեր անհատական middleware-ները
    ]
    
  4. URL լուծող (urls.py): Միջանցքից անցնելուց հետո Django որոշում է, թե որ View-ն պետք է մշակի հարցումը՝ հիմնվելով urls.py ֆայլում սահմանված URL ձևանմուշների վրա:
    # urls.py (ծրագրման մակարդակ)
    from django.contrib import admin
    from django.urls import path, include
    
    urlpatterns = [
        path('admin/', admin.site.urls),
        path('my_app/', include('<my_app>.urls')), # հավելվածի URL-ների ներառում
    ]
    
    
    # urls.py (հավելվածի մակարդակ)
    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: Հետ գտած URL ձևանմուշը կապված է որոշակի ֆունկցիայի կամ class-based View-ի հետ: View-ֆունկցիան (կամ class-based View մեթոդը) ընդունում է HttpRequest օբյեկտը որպես արգումենտ և պարունակում է հարցման մշակման տրամաբանությունը:
    # 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. Մոդել (ընտրովի): View-ը կարող է փոխգործակցել մոդելների հետ (Django ORM-ի API-ն) տվյալների ստացման կամ պահպանման համար:
    # 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. Շաբլոն (ընտրովի): View-ը կարող է օգտագործել Django շաբլոնները HTML պատասխան ստեղծելու համար:
    <!-- 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>
    
  8. Պատասխան: View-ը վերադարձնում է HttpResponse օբյեկտ կամ նրա ենթակլասը (օրինակ՝ JsonResponse, RedirectResponse): Այս օբյեկտը պարունակում է պատասխանին մարմինը և կապված գլխագրերը:
  9. Middleware (վերադարձ շղթա): HttpResponse օբյեկտը անցնում է հակառակ շղթայով նույն middleware-ներով, որոնք մշակել են հարցումը: Middleware-ները կարող են փոփոխել պատասխանը նախքան այն ուղարկելը հաճախորդին:
  10. WSGI սերվեր: Վերջնական պատասխանն ուղարկվում է WSGI սերվերին հաճախորդին։