L’application de redirection

Django est livré avec une application facultative de gestion des redirections. Elle vous permet de stocker des redirections dans une base de données et elle gère ensuite les redirections pour vous. Elle utilise par défaut le code de statut de réponse HTTP 301 Moved Permanently.

Installation

Pour installer l’application de redirection, procédez comme suit :

  1. Veillez à ce que l’application django.contrib.sites soit installée.

  2. Ajoutez 'django.contrib.redirects' à votre réglage INSTALLED_APPS.

  3. Ajoutez 'django.contrib.redirects.middleware.RedirectFallbackMiddleware' à votre réglage MIDDLEWARE.

  4. Lancez la commande manage.py migrate.

Fonctionnement

manage.py migrate crée une table django_redirect dans votre base de données. Il s’agit d’une table de consultation avec les champs site_id, old_path et new_path.

L’intergiciel RedirectFallbackMiddleware fait tout le travail. Chaque fois qu’une application Django génère une erreur 404, cet intergiciel vérifie en dernier recours si l’URL demandée se trouve dans la base de données des redirections. Plus précisément, il cherche une redirection dont le champ old_path correspond à l’URL et dont l’identifiant de site correspond au réglage SITE_ID.

  • Si une correspondance est trouvée et que new_path n’est pas vide, il redirige vers new_path en utilisant une redirection 301 (« Moved Permanently »). Il est possible de créer une sous-classe de RedirectFallbackMiddleware et de définir response_redirect_class à django.http.HttpResponseRedirect pour utiliser plutôt une redirection 302 Moved Temporarily.

  • Si une correspondance est trouvée et que new_path est vide, il envoie une erreur 410 (« Gone ») dans l’en-tête HTTP et une réponse vide (sans contenu).

  • Si aucune correspondance n’est trouvée, le traitement de la requête continue normalement.

L’intergiciel ne s’active que pour les erreurs 404 – pas pour les erreurs 500 ni les réponses ayant un autre code de statut.

Notez que l’ordre dans le réglage MIDDLEWARE est important. En général, vous pouvez mettre RedirectFallbackMiddleware à la fin de la liste, parce qu’il doit être appelé en dernier recours.

Pour plus d’informations sur cet intergiciel, lisez la documentation des intergiciels.

Ajout, modification et suppression des redirections

Via l’interface d’administration

Si vous avez activé l’interface automatique d’administration de Django, vous devriez voir une section « Redirections » sur la page d’accueil du site d’administration. Modifiez les redirections comme vous modifiez tout autre objet dans le système.

Via l’API Python

class models.Redirect

Les redirections sont représentées par un modèle Django standard, qui est défini dans django/contrib/redirects/models.py. Vous pouvez accéder aux objets de redirection via l’API de base de données de Django. Par exemple :

>>> from django.conf import settings
>>> from django.contrib.redirects.models import Redirect
>>> # Add a new redirect.
>>> redirect = Redirect.objects.create(
...     site_id=1,
...     old_path="/contact-us/",
...     new_path="/contact/",
... )
>>> # Change a redirect.
>>> redirect.new_path = "/contact-details/"
>>> redirect.save()
>>> redirect
<Redirect: /contact-us/ ---> /contact-details/>
>>> # Delete a redirect.
>>> Redirect.objects.filter(site_id=1, old_path="/contact-us/").delete()
(1, {'redirects.Redirect': 1})

Intergiciels (« middleware »)

class middleware.RedirectFallbackMiddleware

Vous pouvez modifier les classes HttpResponse utilisées par l’intergiciel en créant une sous-classe de RedirectFallbackMiddleware et en surchargeant les attributs response_gone_class ou response_redirect_class.

response_gone_class

La classe HttpResponse utilisée lorsqu’aucun Redirect n’est trouvé pour le chemin demandé ou qu’il possède une valeur vide pour new_path.

La valeur par défaut est HttpResponseGone.

response_redirect_class

La classe HttpResponse qui se charge de la redirection.

La valeur par défaut est HttpResponsePermanentRedirect.

Back to Top