Hey la compagnie !
![django-logo-negative-small django-logo-negative-small](http://media.paperblog.fr/i/169/1693162/reecrire-adapter-decorator-login_required-dja-L-1.jpeg)
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”
![Réécrire et adapter le decorator “login_required” de Django ;)](http://media.paperblog.fr/i/169/1693162/reecrire-adapter-decorator-login_required-dja-L-2.jpeg)
Enjoy !
Et