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 :
- Veillez à ce que l’application
django.contrib.sites
soit installée. - Ajoutez
'django.contrib.redirects'
à votre réglageINSTALLED_APPS
. - Ajoutez
'django.contrib.redirects.middleware.RedirectFallbackMiddleware'
à votre réglageMIDDLEWARE
. - 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 versnew_path
en utilisant une redirection 301 (« Moved Permanently »). Il est possible de créer une sous-classe deRedirectFallbackMiddleware
et de définirresponse_redirect_class
àdjango.http.HttpResponseRedirect
pour utiliser plutôt une redirection302 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 deRedirectFallbackMiddleware
et en surchargeant les attributsresponse_gone_class
ouresponse_redirect_class
.-
response_gone_class
¶ La classe
HttpResponse
utilisée lorsqu’aucunRedirect
n’est trouvé pour le chemin demandé ou qu’il possède une valeur vide pournew_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
.
-