Django:将管理员注销重定向到allauth登录

时间:2014-07-19 18:58:06

标签: django django-admin django-authentication django-allauth

我使用django-allauth登录页面将用户登录到我的管理面板。这工作正常,但是当他们从管理面板注销时,我希望将它们直接发送回/ accounts / login / page(最好发送到/ accounts / login /?next = / admin / surveys / survey / ),而不是表示"感谢您在网站上花费了大量时间的/ admin / logout /页面。"我在设置文件中尝试了LOGOUT_URL属性,但它似乎没有做我上面描述的内容。这是我的一些相关代码:

# urls.py

from django.conf.urls import patterns, include, url
from django.views.generic import TemplateView

from mysite import views

from django.contrib import admin
admin.autodiscover()

from django.contrib.auth.decorators import login_required
admin.site.login = login_required(admin.site.login)

from django.contrib.auth import views as auth_views

urlpatterns = patterns('',
    url(r'^$', TemplateView.as_view(template_name='landingpage.html'), name='landingpage'),
    url(r'^surveys/', include('surveys.urls', namespace="surveys")),
    url(r'^admin/', include(admin.site.urls)),
    url(r'^submitfeedback/$', views.submitfeedback, name='submitfeedback'),

    # tried this but it didn't work: url(r'^logout/$', 'django.contrib.auth.views.logout', {'next_page': '/accounts/login/'}),
    # tried this but it didn't work: url(r'^admin/logout/$', 'django.contrib.auth.views.logout', {'next_page': '/accounts/login/'}),

    ## below for django-allauth
    url(r'^accounts/', include('allauth.urls')),
)

# settings.py

LOGIN_REDIRECT_URL = "/admin/surveys/survey/"
LOGOUT_URL = "/accounts/login/"

2 个答案:

答案 0 :(得分:4)

我认为最简单的方法不是在views.py中,而是在模板本身中。你想要做的是将admin / base.html文件(在Github here上看到)复制到你的项目模板文件夹中 - 然后你可以根据需要覆盖它。这个模板包含了所有的头文件信息。其余的管理模板。找到以下行:

<a href="{% url 'admin:logout' %}">{% trans 'Log out' %}</a>

只需将其更改为:

<a href="{% url 'account_logout' %}">{% trans 'Log out' %}</a>

现在它应该遵循您网站其余部分的allauth注销格式。

答案 1 :(得分:2)

url(r'^admin/logout/$', 'yourappname.views.signout')之前添加urls.py,然后再加上admin.site.urls

urlpatterns = [
    url(r'^admin/logout/$', 'yourappname.views.signout'),
    url(r'^admin/', admin.site.urls),
    url(r'', include('appname.urls'))
]

当然,在您的应用中,您应该定义一个注销视图:

def signout(request):
    logout(request)
    return redirect(reverse('yourappname:index')) # or wherever you want