Django用户注销无法重定向主页

时间:2015-08-30 03:05:54

标签: python django redirect

在我的django网络应用程序中注销用户后,重定向的主页仍显示“注销”按钮,而不是“使用Facebook登录”。在下面的代码中,我按照django文档注销用户并将页面重定向到主页,即base.html。在注销后,我的网络应用程序似乎仍然具有user.is_authenticated为True?我错过了什么?

我在网上找不到任何有用的提示。任何评论都非常感谢。

以下是我的模板html

的一部分
<div class="navbar-form navbar-right">
                    {% if user.is_authenticated %}
                      <a id="logout" href="/accounts/logout" class="btn btn-success">Logout</a>
                    {% else %} 
                      <a id="facebook_login" href="/accounts/facebook/login" class="btn btn-success">Sign in with Facebook</a>
                    {% endif %}
</div>

这是我的urls.py

url(r'^$', 'homepage.views.home', name='home'),
url(r'^accounts/', include('allauth.urls')),
url(r'^accounts/logout/$', 'homepage.views.logout', name='logout'),

这是我的主页/ views.py

# Create your views here.
def home(request):
    return render(request, "base.html", {})

# ensure only logged in users can access the view.
@login_required
def logout(request):
    logout(request)
    # Take the user back to the homepage.
    return redirect('home')

1 个答案:

答案 0 :(得分:1)

这里有两件事:

  1. 您需要重新排序网址
  2. 从:

    url(r'^accounts/', include('allauth.urls')),
    url(r'^accounts/logout/$', 'homepage.views.logout', name='logout'),
    

    url(r'^accounts/logout/$', 'homepage.views.logout', name='logout'),
    url(r'^accounts/', include('allauth.urls')),
    

    这样,您的注销优先于allauth的注销网址模式

    1. 您应该对导入的logout设置别名,或将logout重命名为其他内容。
    2. 示例:

      from django.contrib.auth import logout as auth_logout
      

      然后

      def logout(request):
          auth_logout(request)
      
          ....