Sobes.tech
Middle

Εξηγήστε πώς γίνεται η επεξεργασία των HTTP αιτημάτων στο Django.

sobes.tech AI

Απάντηση από AI

Η επεξεργασία του αιτήματος περνάει από το middleware, στη συνέχεια φτάνει στον δρομολογητή URL, ο οποίος καθορίζει την αντίστοιχη προβολή. Η προβολή επεξεργάζεται τη λογική επιχειρήσεων και επιστρέφει μια απάντηση HTTP, η οποία περνά επίσης από το middleware πριν αποσταλεί στον πελάτη.

Κύρια στάδια:

  1. Είσοδος στην εφαρμογή: Το αίτημα λαμβάνεται από τον web server (π.χ. Nginx) και περνάει στον server WSGI (Gunicorn, uWSGI), που αλληλεπιδρά με την εφαρμογή Django.

  2. Middleware: Το αίτημα περνάει από μια ακολουθία middleware. Κάθε middleware μπορεί να τροποποιήσει το αίτημα (process_request), να εκτελέσει ενέργειες μετά την επεξεργασία της προβολής (process_view) ή να χειριστεί εξαιρέσεις (process_exception).

    # Παράδειγμα προσαρμοσμένου middleware
    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. Προβολή: Η προβολή λαμβάνει ένα αντικείμενο HttpRequest, επεξεργάζεται το αίτημα (π.χ. αλληλεπιδρώντας με τη βάση δεδομένων μέσω ORM, εκτελώντας επιχειρηματική λογική) και διαμορφώνει ένα αντικείμενο 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. Middleware (αντίστροφη διαδρομή): Το αντικείμενο HttpResponse περνάει επίσης μέσω της ακολουθίας middleware με αντίστροφη σειρά. Το middleware μπορεί να τροποποιήσει την απάντηση (process_response).

  6. Αποστολή απάντησης: Ο server WSGI στέλνει την HTTP απάντηση στον πελάτη μέσω του web server.

Σχηματικά:

Πελάτης <-> Web server <-> WSGI server <-> Middleware (Αίτημα) <-> URL δρομολογητής <-> Προβολή <-> ORM / Επιχειρηματική λογική <-> Προβολή <-> Middleware (Απάντηση) <-> WSGI server <-> Web server <-> Πελάτης