Sobes.tech
Middle

Explique como ocorre o processamento de pedidos HTTP no Django.

sobes.tech IA

Resposta da IA

O processamento da solicitação passa pelo middleware, depois chega ao roteador de URL, que determina a visualização correspondente. A visualização processa a lógica de negócios e retorna uma resposta HTTP, que também passa pelo middleware antes de ser enviada ao cliente.

Etapas principais:

  1. Entrada na aplicação: A solicitação é recebida pelo servidor web (por exemplo, Nginx) e passada para o servidor WSGI (Gunicorn, uWSGI), que interage com a aplicação Django.

  2. Middleware: A solicitação passa por uma sequência de middleware. Cada middleware pode modificar a solicitação (process_request), realizar ações após o processamento da visualização (process_view) ou lidar com exceções (process_exception).

    # Exemplo de middleware personalizado
    def simple_middleware(get_response):
        def middleware(request):
            # Lógica ANTES do processamento da visualização
            print(f"Processando solicitação em {request.path}")
    
            response = get_response(request)
    
            # Lógica DEPOIS do processamento da visualização
            print(f"Resposta com status {response.status_code} enviada para {request.path}")
    
            return response
        return middleware
    
  3. Roteamento URL: Django compara a URL da solicitação com os padrões definidos em urls.py. Quando há correspondência, encontra-se a visualização correspondente (função ou classe).

    # Exemplo de 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. Visualização: A visualização recebe um objeto HttpRequest, processa a solicitação (por exemplo, interagindo com o banco de dados via ORM, realizando lógica de negócios) e forma um objeto HttpResponse.

    # Exemplo de 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"Detalhes do artigo: {article.title}")
        except Article.DoesNotExist:
            return HttpResponse("Artigo não encontrado", status=404)
    
    def about_page(request):
        return HttpResponse("Página Sobre Nós")
    
  5. Middleware (passagem inversa): O objeto HttpResponse também passa pela sequência de middleware em ordem inversa. O middleware pode modificar a resposta (process_response).

  6. Envio da resposta: O servidor WSGI envia a resposta HTTP ao cliente através do servidor web.

De forma esquemática:

Cliente <-> Servidor web <-> Servidor WSGI <-> Middleware (Solicitação) <-> Roteador URL <-> Visualização <-> ORM / Lógica de Negócio <-> Visualização <-> Middleware (Resposta) <-> Servidor WSGI <-> Servidor web <-> Cliente