django - Comment faire pour rediriger django.contrib.auth.les vues.après connexion de connexion?
J'ai ajouté de django.contrib.auth.les vues.connexion partout dans ma page, pour qui j'ai eu à charge un templatetag (qui renvoie le AuthenticationForm) dans mon base.html. Cette templatetags comprend la registration/login.html
modèle.
La connexion fonctionne ok mais je veux rediriger les utilisateurs vers la même page, ils sont avant la connexion. Maintenant, il me redirige vers /wherever_i_am/login qui montre registration/login.html
avec la "connexion ok" ou "échec de la connexion" messages mais sans le reste de base.html.
J'ai suivi de documentation de django et quelques DONC des questions comme cette mais je ne peux pas rediriger correctement. J'ai modifié le next
variable, mais il ne semble pas fonctionner (next={{ request.get_full_path }}
me redirige vers /wherever_i_am/login ...une fois de plus)
Avez-vous essayé quelque chose de similaire? des idées?
UPDATE1
Maintenant, la question pourrait être quelque chose comme: Dois-je déclarer mes propres connexion de vue, si je veux inclure le formulaire de connexion partout dans ma page web?
Merci.
OriginalL'auteur juankysmith | 2011-07-07
Vous devez vous connecter pour publier un commentaire.
Trouvé de réponse:
Modifier les paramètres.LOGIN_REDIRECT_URL dans votre settings.py,
code ci-dessous est la copie de django:
C'est le code de django/contrib/aut/points de vue.py:80 (Django 2.0). Je suis encore à essayer cette
OriginalL'auteur Jiejing Zhang
Ci-dessous permet redirige l'utilisateur vers la page qu'ils ont tenté d'accès après l'ouverture de la session, mais sans avoir à écrire une présentation personnalisée. Il contient tout le code que vous devez ajouter pour le faire fonctionner. (En aparté, pas tous les TEMPLATE_CONTEXT_PROCESSORS sont nécessaires, mais si vous définissez une valeur explicite vous écraser les valeurs par défaut donc besoin de l'ajouter à nouveau.)
settings.py
urls.py
login.html
logout.html
views.py
OriginalL'auteur sean
J'ai utilisé quelque chose comme ça avec connexion par défaut de l'affichage:
tout a bien fonctionné.
PS: êtes-vous absolument sûr que "context_processors.demande" est inclus dans les paramètres? Oublier d'inclure c'est un problème commun.
UPD: autant Que je sache, il n'y a pas moyen de faire de connexion par défaut de l'affichage pour rediriger sur l'échec de la connexion (Il ne fonctionne tout simplement pas de cette façon).
Encore, je me trompe peut-être
Comme je peux voir de connexion par défaut de la vue redirige uniquement sur la réussite. Ainsi, pour accomplir la redirection avec échec de la connexion que vous avez en effet besoin de connexion personnalisés vue.
Je peux le faire mais j'ai été en évitant cette solution dès le début, parce que je voulais utiliser seulement le générique de django connexion. Suis-je la force à déclarer ma propre connexion??
Autant que je sache - oui. Mais il y a rien de criminel - vous voulez des fonctionnalités étendues - vous de l'étendre.
je pense que dans la valeur cachée est {{suivant}} pas {{demande.get_full_path}}
OriginalL'auteur Pill
Enfin, j'ai créé un login vue qui appelle django.contrib.auth.les vues.connexion à l'interne.
Il suffit d'importer de django.contrib.auth.les vues.connexion (peut-être avec un alias) et de créer une fonction de connexion dans votre views.py faire ce que vous avez à faire et a appelé la contrib de la fonction à la fin.
OriginalL'auteur juankysmith
Je vous suggère de passer un précédent url en paramètre dans l'url:
et ensuite utiliser cette valeur dans une vue
OriginalL'auteur Kee
{{request.get_full_path}}
vous donne le chemin d'accès actuel, donc c'est normal que la redirection pointe vers le même endroit, changer pour{{next}}
dans votreregistration/login.html
modèleOriginalL'auteur sacabuche
En ajoutant jusqu'à @Sean anwer. Code pour itérer sur chaque champ de formulaire pour écrire champ d'erreur ci-dessus la miss de type de champ.
Donc, dans de Sean login.html est le code existant:
login.html
Maintenant ce que vous devez faire est de remplacer le "je peux changer!" de la ligne (ligne 4 dans l'extrait de code ci-dessus) avec le code suivant:
Vous pouvez utiliser ce modèle pour d'autres formes (par exemple pour l'enregistrement). 🙂
OriginalL'auteur Filip Savic
Je tombe sur cette question dans mon processus de mise en œuvre de Facebook Compte de la Liaison. Le problème est le même: comment puis-je rediriger correctement django fois la connexion réussie,?
Rappelez-vous ceci: votre settings.py contenir LOGIN_REDIRECT_URL droit? Donc, c'est le seul endroit où vous devriez faire de la logique de la redirection. Pour ce faire, connectez d'abord ce signal (le mettez dans votre views.py):
La logique ci-dessus peuvent ne pas refléter votre cas, mais l'idée est la création d'une variable de session pour être lu dans l'itinéraire défini comme LOGIN_REDIRECT_URL.
Donc, dans mon cas:
Que c'est!
OriginalL'auteur swdev
Ajouter un décorateur avant le point de vue de la fonction devrait être OK.
voir ici pour plus de détails
Bien sûr, il ne. le décorateur oriente l'utilisateur vers
/accounts/login/?next=my_previous_url
Désolé, peut-être que mon explication n'est pas claire. J'ai inclus une templatetag avoir le formulaire de connexion partout sur ma page web, la classique barre en dessous de l'en-tête, donc je veux être redirigé vers la même page que je suis en réalité. J'ai finalement créé un login vue qui appelle django.contrib de connexion qui redirige vers la demande.MÉTA.get('HTTP_REFERER')
peut-être que vous devriez mettre votre login dans le base.html je pense qu'un templatetag est pas nécessaire, avez-vous essayé ma réponse?
Je ne suis pas en utilisant le paramètre suivant
OriginalL'auteur ChanDon