Sobes.tech
Middle

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

sobes.tech AI

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

Հարցի մշակումը անցնում է միջնորդով, ապա այն փոխանցվում է URL-մարշրութային համակարգին, որը որոշում է համապատասխան ներկայացումը: Ներկայացումը մշակում է բիզնես տրամաբանությունը և վերադարձնում HTTP պատասխան, որը նույնպես անցնում է միջնորդով նախքան այն ուղարկելը հաճախորդին:

Հիմնական փուլերը՝

  1. Ներմուծում ծրագրում: Հարցը ընդունվում է վեբ սերվերից (օրինակ՝ Nginx) և փոխանցվում է WSGI սերվերին (Gunicorn, uWSGI), որը հաղորդակցվում է Django ծրագրի հետ:

  2. Միջնորդ: Հարցը անցնում է միջնորդների շարք: Յուրաքանչյուր միջնորդ կարող է փոփոխել հարցը (process_request), կատարել գործողություններ ներկայացման մշակման հետո (process_view) կամ մշակել արտահայտություններ (process_exception):

    # Օրինակ օգտագործողի միջնորդ
    def simple_middleware(get_response):
        def middleware(request):
            # Լոգիկա Նախ ներկայացման մշակման
            print(f"Մշակվում է հարցը {request.path} համար")
    
            response = get_response(request)
    
            # Լոգիկա Պոստ ներկայացման մշակման
            print(f"Պատասխան {response.status_code} կարգավիճակով ուղարկված {request.path} համար")
    
            return response
        return middleware
    
  3. URL մարշրութային համակարգ: Django համեմատում է հարցի URL-ը urls.py ֆայլում սահմանված ձևանմուշների հետ: Համապատասխան ներկայացումը գտնելու համար:

    # urls.py օրինակ
    from django.urls import path
    from . import views
    
    urlpatterns = [
        path('articles/<int:article_id>/', views.article_detail),
        path('about/', views.about_page),
    ]
    
  4. Ներկայացում (View): Ներկայացումը ստանում է HttpRequest օբյեկտը, մշակել հարցը (օրինակ՝ տվյալների բազայի հետ փոխազդեցությամբ, բիզնես տրամաբանության իրականացման միջոցով) և ձևավորում HttpResponse օբյեկտ:

    # views.py օրինակ
    from django.http import HttpResponse
    from .models import Article
    
    def article_detail(request, article_id):
        try:
            article = Article.objects.get(pk=article_id)
            return HttpResponse(f"Հոդվածի մանրամասները: {article.title}")
        except Article.DoesNotExist:
            return HttpResponse("Հոդվածը չի գտնվել", status=404)
    
    def about_page(request):
        return HttpResponse("Մեր մասին էջ")
    
  5. Միջնորդ (հետադարձ անցում): HttpResponse օբյեկտը նույնպես անցնում է միջնորդների շարք հակառակ հերթականությամբ: Միջնորդը կարող է փոփոխել պատասխանն (process_response):

  6. Պատասխան ուղարկում: WSGI սերվերը ուղարկում է HTTP պատասխան հաճախորդին՝ վեբ սերվերի միջոցով:

Սխեմատիկ:

Հաճախորդ <-> Վեբ սերվեր <-> WSGI սերվեր <-> Միջնորդ (Հարց) <-> URL մարշրութային համակարգ <-> Ներկայացում <-> ORM / Բիզնես տրամաբանություն <-> Ներկայացում <-> Միջնորդ (Պատասխան) <-> WSGI սերվեր <-> Վեբ սերվեր <-> Հաճախորդ