Sobes.tech
Middle

Izskaidrojiet, kā notiek HTTP pieprasījumu apstrāde Django.

sobes.tech AI

Atbilde no AI

Pieprasījuma apstrāde notiek caur middleware, pēc tam tas nonāk URL maršrutētājā, kas nosaka atbilstošo skatu. Skats apstrādā biznesa loģiku un atgriež HTTP atbildi, kas arī cauriet caur middleware pirms nosūtīšanas klientam.

Galvenie posmi:

  1. Ieeja programmā: Pieprasījumu pieņem tīmekļa serveris (piemēram, Nginx) un nodod to WSGI serverim (Gunicorn, uWSGI), kas sadarbojas ar Django lietotni.

  2. Middleware: Pieprasījums iet caur virkni middleware. Katrs middleware var modificēt pieprasījumu (process_request), veikt darbības pēc skata apstrādes (process_view) vai apstrādāt izņēmumus (process_exception).

    # Piemērs lietotāja middleware
    def simple_middleware(get_response):
        def middleware(request):
            # LOGIKA PIRMS skata apstrādes
            print(f"Apstrādā pieprasījumu {request.path}")
    
            response = get_response(request)
    
            # LOGIKA PĒC skata apstrādes
            print(f"Atbilde ar statusu {response.status_code} nosūtīta {request.path}")
    
            return response
        return middleware
    
  3. URL maršrutēšana: Django salīdzina pieprasījuma URL ar urls.py failā definētajiem modeļiem. Atrodot atbilstošo skatu (funkciju vai klasi):

    # urls.py piemērs
    from django.urls import path
    from . import views
    
    urlpatterns = [
        path('articles/<int:article_id>/', views.article_detail),
        path('about/', views.about_page),
    ]
    
  4. Skats (View): Skats saņem HttpRequest objektu, apstrādā pieprasījumu (piemēram, ar ORM saistītu ar datu bāzi, veic biznesa loģiku) un veido HttpResponse objektu.

    # views.py piemērs
    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"Raksta detaļas: {article.title}")
        except Article.DoesNotExist:
            return HttpResponse("Raksts nav atrasts", status=404)
    
    def about_page(request):
        return HttpResponse("Par mums")
    
  5. Middleware (atpakaļgaitas): Objekts HttpResponse arī iet caur middleware secību atpakaļgaitā. Middleware var modificēt atbildi (process_response).

  6. Atbildes nosūtīšana: WSGI serveris nosūta HTTP atbildi klientam caur tīmekļa serveri.

Shēma:

Klients <-> Tīmekļa serveris <-> WSGI serveris <-> Middleware (Pieprasījums) <-> URL maršrutētājs <-> Skats <-> ORM / Biznesa loģika <-> Skats <-> Middleware (Atbilde) <-> WSGI serveris <-> Tīmekļa serveris <-> Klients