Hey la compagnie !

Parmi les « raccourcis » que met en place django, on retrouve le decorator « login_required » qui permet de restreindre l’accès à une vue aux utilisateurs authentifiés et de rediriger les autres vers la page de connexion. Sur le papier, c’était exactement ce qu’il me fallait. Mais en pratique, j’avais quelques améliorations à apporter =p
En effet, j’utilise dans tout le reste du site une fonction de redirection maison qui fait transiter le visiteur via une page dédiée à l’affichage d’un message explicitant la redirection (ex : « Vous devez être connecté pour voir cette page », « Connexion réussie », etc.). Mon but est donc de retrouver le même comportement avec le decorator de django, comportement qui est d’après mes recherches impossible d’obtenir …
Soit, je vais coder moi-même un decorator répondant à mes besoins
#-*- encoding:utf-8 -*- from django.shortcuts import render_to_response def if_logged_in(f, message='Vous devez être connecté pour pouvoir voir cette page.'): """ Décorator pour refuser l'accès à une page aux users non connectés """ def wrap(request, *args, **kwargs): if not request.user.is_authenticated(): return redirection(request, '/connexion/', message) return f(request, *args, **kwargs) wrap.__doc__ = f.__doc__ wrap.__name__ = f.__name__ return wrap def redirection(request, REDIR_URL, REDIR_MESSAGE='Erreur !', REDIR_TIME=4): """ Fonction permettant de rediriger un user les variables locales à la fonction pourront être utilisées dans le template """ return render_to_response('redirection.html', locals())
Pour ce qui est de l’utilisation, elle est identique à celle de n’importe quel decorator, y compris « login_required »

Enjoy !