Django, de rediriger tous les utilisateurs non authentifiés à la page d'atterrissage
J'ai un site web de django avec de nombreuses adresses et points de vue. Maintenant, j'ai demandé à rediriger tous les utilisateurs non authentifiés à une certaine page de destination. Ainsi, tous les points de vue doivent vérifier si user.is_authenticated()
et le retour à un nouvel ensemble de pages d'atterrissage.
Peut-il être réalisé dans une jolie façon, au lieu de vous embêter avec mes views.py
/urls.py
que beaucoup?
django-fief (github.com/mgrouchy/django-stronghold) réalise tous vos points de vue login_required par défaut
OriginalL'auteur xpanta | 2014-01-14
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser Middleware.
Quelque chose comme ceci permettra de vérifier l'authentification de l'utilisateur à chaque demande:
Docs: process_request
Aussi, ne pas oublier de l'activer dans settings.py
OriginalL'auteur Dmit3Y
Il y a un moyen plus simple pour ce faire, il suffit d'ajouter le "login_url" paramètre @login_required et si l'utilisateur n'est pas de connexion, il sera redirigé vers la page de connexion. Vous pouvez le trouver ici
Il ne peut pas travailler pour une classe ? J'ai créé une classe qui hérite de Django LoginView
CustomLoginView(LoginView)
Toutefois, j'ai ce message d'erreur :path('login/', views.CustomLoginView.as_view(), name='login')
OriginalL'auteur AriG
De Django 1.10, la coutume middleware classes doivent implémenter la nouvelle syntaxe de style. Vous pouvez utiliser la classe suivante pour vérifier que l'utilisateur est connecté, tout en essayant d'accéder à tout point de vue.
self.get_response(request)
appeler pour qu'il vienne après lerequest.user.is_authenticated()
vérifier . La façon dont il est écrit, un non authentifié demande d'exécuter le code de la vue, ce qui va générer une réponse et puis la auth vérification de remplacer cette réponse avec une redirection vers la page de connexion. Les mises à jour ou suppressions dans le code de la vue doit être délimitée par des contrôles d'autorisation, de toute façon, mais c'est probablement mieux de ne pas prendre le risque.OriginalL'auteur IVI
voir les docs pour connexion requise décorateur
une autre option consiste à ajouter à votre urls.py les modèles, voir cette réponse
bien que cela ne marche pas à l'adresse de l'OP question, il donne toujours une solution sympa. Je voudrais ajouter que votre décorateur peut avoir une redirection; exemple @login_required(login_url='/comptes/signin')
OriginalL'auteur Guy Gavriely
Cela peut être fait avec le middleware.
J'ai trouvé un très chouette djangosnippet qui fait exactement ce que vous demandez. Vous pouvez le trouver ici, et il ressemble:
Tout ce que vous avez à faire est d'enregistrer le fichier en tant que
middleware.py
et inclure la classe dans vous êtes settings.py, c'est à direVous pouvez également définir un
LOGIN_URL
danssettings.py
, de sorte que vous serez redirigé vers votre page de connexion personnalisée. La valeur par défautLOGIN_URL
est'/accounts/login/'
.OriginalL'auteur Martin Hallén
Peut-être trop tard, mais à django de 1,9+ c'est trop facile.
Django introduit Connexion Requise mixin pour les classes génériques et c'est un superbe exemple
ici par William S. Vincent
simplement à votre avis, ajouter LoginRequiredMixin en tant que parent de la classe
Vous pouvez également utiliser login_required décorateur pour la méthode demande
OriginalL'auteur Alireza Saremi