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: