Redirecionamento e Envio de Código de Status no Django
Redirecionamento
Quando uma página é movida de um endereço para outro, é necessário indicar aos usuários e aos mecanismos de busca que a página foi realocada. Isso pode ser feito utilizando redirecionamentos.
Os redirecionamentos podem ser classificados como temporários ou permanentes. No caso de um redirecionamento temporário, informa-se que a página foi movida para um novo endereço de forma provisória, retornando o código de status 302. Já em um redirecionamento permanente, a página é considerada realocada definitivamente, utilizando-se o código de status 301.
No Django, os redirecionamentos são implementados por meio das classes HttpResponseRedirect
e HttpResponsePermanentRedirect
, ambas disponíveis no módulo django.http
.
Por exemplo, considere o seguinte código no arquivo views.py
:
from django.http import HttpResponse, HttpResponseRedirect, HttpResponsePermanentRedirect
def index(request):
return HttpResponse("Index")
def about(request):
return HttpResponse("About")
def contact(request):
return HttpResponseRedirect("/about")
def details(request):
return HttpResponsePermanentRedirect("/")
No exemplo acima, a função contact()
realiza um redirecionamento temporário para a página /about
, enquanto a função details()
realiza um redirecionamento permanente para a página /
.
No arquivo urls.py
, as rotas podem ser configuradas da seguinte forma:
from django.urls import path
from hello import views
urlpatterns = [
path("", views.index),
path("about/", views.about),
path("contact/", views.contact),
path("details/", views.details),
]
Envio de Códigos de Status
Além de redirecionamentos, o Django permite o envio de respostas com códigos de status HTTP personalizados por meio de classes específicas do módulo django.http
. Estas classes facilitam o retorno de respostas adequadas para diferentes situações:
Código de Status | Classe |
---|---|
304 (Not Modified) | HttpResponseNotModified |
400 (Bad Request) | HttpResponseBadRequest |
403 (Forbidden) | HttpResponseForbidden |
404 (Not Found) | HttpResponseNotFound |
405 (Method Not Allowed) | HttpResponseNotAllowed |
410 (Gone) | HttpResponseGone |
500 (Internal Server Error) | HttpResponseServerError |
Essas classes permitem a inclusão de mensagens detalhadas ao usuário, fornecidas como parâmetro no construtor. Exemplos:
HttpResponseNotModified()
HttpResponseBadRequest("Requisição inválida")
HttpResponseForbidden("Acesso proibido")
HttpResponseNotFound("Página não encontrada")
HttpResponseNotAllowed("Método não permitido")
HttpResponseGone("Conteúdo indisponível")
HttpResponseServerError("Erro interno no servidor")
A seguir, um exemplo prático. Considere o seguinte código no arquivo views.py
:
from django.http import HttpResponse, HttpResponseNotFound, HttpResponseForbidden, HttpResponseBadRequest
def index(request, id):
people = ["Tom", "Bob", "Sam"]
# Verifica se o ID está dentro do intervalo válido
if id in range(0, len(people)):
return HttpResponse(people[id])
# Retorna erro 404 se o índice for inválido
else:
return HttpResponseNotFound("Página não encontrada")
def access(request, age):
# Retorna erro 400 se a idade estiver fora do intervalo permitido
if age not in range(1, 111):
return HttpResponseBadRequest("Idade inválida")
# Retorna mensagem de acesso permitido para maiores de 17 anos
if age > 17:
return HttpResponse("Acesso permitido")
# Retorna erro 403 se a idade for insuficiente
else:
return HttpResponseForbidden("Acesso bloqueado: idade insuficiente")
No exemplo acima, a função index()
retorna o nome de uma pessoa com base no índice fornecido. Caso o índice esteja fora do intervalo válido, é retornado um erro 404. Já a função access()
verifica se a idade fornecida está dentro do intervalo permitido. Caso contrário, é retornado um erro 400. Se a idade for insuficiente, é retornado um erro 403.
No arquivo urls.py
, as rotas podem ser configuradas da seguinte forma:
from django.urls import path
from hello import views
urlpatterns = [
path("index/<int:id>", views.index),
path("access/<int:age>", views.access),
]
A rota index/<int:id>
exibirá o nome correspondente ao índice na lista people
ou uma mensagem de erro 404 para valores inválidos. A rota access/<int:age
retornará mensagens ou códigos de erro baseados na validação do valor de age
.
Além disso, as mensagens relacionadas aos acessos às rotas são exibidas no console do servidor Django, permitindo o monitoramento durante o desenvolvimento.
Documentação oficial: