Εξηγήστε πώς γίνεται η επεξεργασία των HTTP αιτημάτων στο Django.
sobes.tech AI
Απάντηση από AI
Η επεξεργασία του αιτήματος περνάει από το middleware, στη συνέχεια φτάνει στον δρομολογητή URL, ο οποίος καθορίζει την αντίστοιχη προβολή. Η προβολή επεξεργάζεται τη λογική επιχειρήσεων και επιστρέφει μια απάντηση HTTP, η οποία περνά επίσης από το middleware πριν αποσταλεί στον πελάτη.
Κύρια στάδια:
-
Είσοδος στην εφαρμογή: Το αίτημα λαμβάνεται από τον web server (π.χ. Nginx) και περνάει στον server WSGI (Gunicorn, uWSGI), που αλληλεπιδρά με την εφαρμογή Django.
-
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 -
Δρομολόγηση 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), ] -
Προβολή: Η προβολή λαμβάνει ένα αντικείμενο
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("Σελίδα Σχετικά με εμάς") -
Middleware (αντίστροφη διαδρομή): Το αντικείμενο
HttpResponseπερνάει επίσης μέσω της ακολουθίας middleware με αντίστροφη σειρά. Το middleware μπορεί να τροποποιήσει την απάντηση (process_response). -
Αποστολή απάντησης: Ο server WSGI στέλνει την HTTP απάντηση στον πελάτη μέσω του web server.
Σχηματικά:
Πελάτης <-> Web server <-> WSGI server <-> Middleware (Αίτημα) <-> URL δρομολογητής <-> Προβολή <-> ORM / Επιχειρηματική λογική <-> Προβολή <-> Middleware (Απάντηση) <-> WSGI server <-> Web server <-> Πελάτης