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, comohttp
ouhttps
.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_HOST
esteja 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: