Atualizado: 14/12/2024

Redirecionamento e Envio de Código de Status - 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 StatusClasse
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.

Navegador exibindo o nome de usuário da rota index
Navegador exibindo erro da rota 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.

Mensagens de acessos às rotas exibidas no console do servidor
Política de Privacidade

Copyright © www.programicio.com Todos os direitos reservados

É proibida a reprodução do conteúdo desta página sem autorização prévia do autor.

Contato: programicio@gmail.com