web-dev-qa-db-fra.com

la déconnexion django me redirige vers la page d'administration

J'ai fourni une fonctionnalité de connexion simple. Pour vous déconnecter, j'ai essayé d'utiliser celui intégré. Ceci est mon urls.py:

(r'', include('Django.contrib.auth.urls')),

Et voici mon fichier de modèle:

{% if user.is_authenticated %}
logged in as {{ user }}
(<a href="{% url "logout" %}">logout</a>)
{% else %}

J'ai également activé le site d'administration par défaut de Django. Lorsque je clique sur logout, il me montre la vue de déconnexion de l’administration. Comment puis-je transmettre l'attribut de déconnexion de la page suivante pour indiquer à Django quelle vue restituer?

25
ducin

Si vous voyez la page de déconnexion du site d'administration Django au lieu de votre propre page de déconnexion (votre_application/modèles/registration/log_out.html), vérifiez le paramètre INSTALLED_APPS de votre projet et assurez-vous que Django.contrib.admin vient après. 'ton application'. Les deux modèles sont situés dans le même chemin relatif et le chargeur de modèles Django utilisera le premier qu'il trouvera.

46
Gautham Nookala

Testé sur Django 1.6:

Ce que je fais est d'ajouter ceci dans mon urls.py:

(r'^management/logout/$', 'Django.contrib.auth.views.logout'),

Et puis utilisé:

<a href="{% url "Django.contrib.auth.views.logout" %}?next=/">Log out</a>

Pour l'argument next, vous pointez ici la bonne URL.

Testé sur Django 2.1

Ajouter à urlpatterns dans urls.py:

from Django.contrib.auth import views as auth_views

urlpatterns = [
    path('logout/', auth_views.LogoutView.as_view(), name='logout'),
]

Et puis utilisez-le dans le template:

<a href="{% url "logout" %}?next=/">logout</a>

Plus d'informations peuvent être trouvées ici .

14
Menda

Selon la documentation, vous pouvez fournir le paramètre next_page à la vue de déconnexion. https://docs.djangoproject.com/en/dev/topics/auth/#Django.contrib.auth.views.logout

(r'^logout/$', 'Django.contrib.auth.views.logout',
    {'next_page': '/logged_out/'})
10
catherine

Tout cela est assez bien expliqué dans le manuel. Y a-t-il quelque chose de spécifique que vous ne comprenez pas?

https://docs.djangoproject.com/en/dev/topics/auth/default/#how-to-log-a-user-out

from Django.contrib.auth import logout

def logout_view(request):
    logout(request)
    # Redirect to a success page.

Alternativement si vous ne voulez pas créer votre propre vue

https://docs.djangoproject.com/en/dev/topics/auth/default/#Django.contrib.auth.views.logout

{% url 'logout' next='/some/url/' %}
4
Wolph

je connaissais le même problème après Django, par exemple ... j'ai trouvé cette URL qui fonctionnait pour moi 

url(r'^logout/$', 'Django.contrib.auth.views.logout', { 'template_name': 'account/logout.html',}, name='logout' ),
4
Paddy Popeye

La solution la plus simple est:

  1. Assurez-vous que votre application arrive avant Django.contrib.admin sous les applications installées dans settings.py.

  2. Assurez-vous que votre modèle s'appelle logged_out.html.

3
markh

Il suffit de remplacer les chargeurs ici, et les modèles d'authentification se trouvent dans "your_progect_apps/templates/registration":

TEMPLATES = [
{
    'BACKEND': 'Django.template.backends.Django.DjangoTemplates',
    'DIRS': [os.path.join(BASE_DIR, 'templates')],
    'OPTIONS': {
        'context_processors': [
            'Django.template.context_processors.debug',
            'Django.template.context_processors.request',
            'Django.contrib.auth.context_processors.auth',
            'Django.contrib.messages.context_processors.messages',
        ],
        'loaders': [
            'Django.template.loaders.filesystem.Loader',
            'Django.template.loaders.app_directories.Loader',
        ],
    },
},

]

Django v2.1