A aplicação de redirecionamento

O Django vem acompanhado de uma aplicação de redirecionamento opcional. Ela permite você armazenar redirecionadores no banco de dados e manipula o redirecionamento pra você.

Instalação

Para instalá-lo, siga os seguintes passos:

  1. Adicione 'django.contrib.redirects' em suas INSTALLED_APPS.
  2. Adicione 'django.contrib.redirects.middleware.RedirectFallbackMiddleware' nas suas MIDDLEWARE_CLASSES.
  3. Execute o commando manage.py syncdb.

Como ele funciona

O manage.py syncdb cria uma tabela django_redirect no seu banco de dados. Essa é uma tabela de aparência simples com os campos site_id, old_path e new_path.

O RedirectFallbackMiddleware faz todo trabalho. Toda vez que uma aplicação Django gera um erro 404, esse middleware checa o banco de dados do redirecionador para a URL acessada como um último recurso. Especialmente, ele procura por um redirecionador que tenha um old_path com um ID do site que corresponde ao SITE_ID no arquivo settings.py.

  • Se ele encontra uma correspondência, e new_path não está vazio, ele redireciona para o new_path.
  • Se ele encontra uma correspondência, e new_path está vazio, ele envia um cabeçalho HTTP 410 (“Gone”) e uma resposta vazia (content-less).
  • Se ele não encontra uma correspondência, a requisição continua sendo processada normalmente.

O middleware somente opera sobre 404s – não para 500s ou respostas de qualquer outro código de status.

Note que a ordem do MIDDLEWARE_CLASSES importa. Geralmente, você pode colocar o RedirectFallbackMiddleware no final da lista, porque ele é um último recurso.

Para saber mais sobre o middleware, leia a documentação do middleware.

Como adicionar, mudar e deletar redirecionadores

Via interface de administração

Se você tem ativada a interface de administração automática do Django, você pode ver uma seção “Redirects” na página principal do admin. Edite os redirecionadores como você edita qualquer outro objeto do sistema.

Via API do Python

class models.Redirect

Os redirecionadores são representados por um modelo Django padrão, que se encontram em django/contrib/redirects/models.py. Você pode acessar os objetos de redirecionamento utilizando a API de banco de dados do Django.