Obtendo dados do objeto HttpRequest no Django
No Django, as funções de visualização recebem como parâmetro obrigatório o objeto HttpRequest, responsável por armazenar todas as informações relacionadas a uma requisição HTTP. Esse objeto fornece diversos atributos e métodos que permitem acessar detalhes específicos da requisição.
Principais atributos do HttpRequest:
scheme: Define o esquema da requisição, comohttpouhttps.body: Armazena o corpo da requisição em formato de bytes.path: Indica o caminho solicitado pelo cliente.method: Representa o método HTTP utilizado, como GET, POST, PUT etc.encoding: Define a codificação usada para os dados da requisição.content_type: Refere-se ao tipo de conteúdo enviado, conforme especificado no cabeçalhoCONTENT_TYPE.GET: Dicionário contendo os parâmetros da requisição GET.POST: Dicionário contendo os parâmetros da requisição POST.COOKIES: Dicionário com os cookies enviados pelo cliente.FILES: Contém os arquivos enviados pelo cliente.headers: Fornece os cabeçalhos da requisição em formato de dicionário.META: Dicionário que armazena todos os cabeçalhos HTTP disponíveis na requisição. A lista de cabeçalhos pode variar de acordo com o cliente e o servidor. Alguns exemplos importantes incluem:CONTENT_LENGTH: Comprimento do conteúdo da requisição.CONTENT_TYPE: Tipo MIME do conteúdo da requisição.HTTP_ACCEPT: Tipos de resposta aceitos pelo cliente.HTTP_ACCEPT_ENCODING: Codificações aceitas pelo cliente na resposta.HTTP_ACCEPT_LANGUAGE: Idioma aceito na resposta.HTTP_HOST: Host do servidor acessado.HTTP_REFERER: URL da página que originou a requisição (se disponível).HTTP_USER_AGENT: Identificação do navegador ou cliente que realizou a requisição.QUERY_STRING: String de consulta enviada na URL.REMOTE_ADDR: Endereço IP do cliente.REMOTE_HOST: Nome do host do cliente.REMOTE_USER: Dados de autenticação do cliente (se disponíveis).REQUEST_METHOD: Método utilizado na requisição, como GET ou POST.SERVER_NAME: Nome do servidor.SERVER_PORT: Porta utilizada pelo servidor.
Métodos úteis do HttpRequest:
get_full_path: Retorna o caminho completo da requisição, incluindo a string de consulta (query string).get_host: Retorna o host da requisição, levando em conta os cabeçalhosHTTP_X_FORWARDED_HOST(casoUSE_X_FORWARDED_HOSTesteja habilitado) eHTTP_HOST.get_port: Retorna o número da porta utilizada na requisição.
A seguir, um exemplo de função de visualização que utiliza o objeto HttpRequest para obter informações sobre a requisição no arquivo views.py:
from django.http import HttpResponse
def index(request):
host = request.META["HTTP_HOST"] # Obtém o endereço do servidor
user_agent = request.META["HTTP_USER_AGENT"] # Obtém informações sobre o navegador do cliente
path = request.path # Obtém o caminho solicitado pelo cliente
return HttpResponse(f"""
<p>Host: {host}</p>
<p>Path: {path}</p>
<p>User-agent: {user_agent}</p>
""")Neste caso, são acessados os valores dos cabeçalhos HTTP_HOST e HTTP_USER_AGENT, além do caminho da requisição através do atributo path.
Para disponibilizar a função index como uma rota, é necessário registrá-la no arquivo urls.py:
from django.urls import path
from hello import views
urlpatterns = [
path("index", views.index),
]Ao acessar a URL /index, o servidor responde com as informações capturadas da requisição. Por exemplo:
Host: 127.0.0.1:8000 Path: /index User-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36
Documentação oficial: