2017-01-12 42 views
-1

仍然記錄我有url.py有:Django的:LogoutView不退出 - 在

url(r'^logout/', views.LogoutView.as_view(), name='logout'), 

views.py

from django.contrib.auth import logout 

class LogoutView(RedirectView): 
    permanent = False 
    url = reverse_lazy('login') 

    def get(self, request, *args, **kwargs): 
     logout(request) 
     return super(LogoutView, self).get(request, *args, **kwargs) 

我使用鏈接<a href="{% url 'logout' %} ">Logout</a>在我的模板。

但是,如果我嘗試註銷自己,它不起作用,我也不會收到錯誤消息。

我也試過:

def logout_view(request): 
    logout(request) 
    return HttpResponseRedirect('/login/') 

但我仍然可以訪問所有網頁。我使用基於類的視圖並使用@method_decorator(login_required)

我用於登錄的django模塊django-ldap-auth

回答

2

您需要將permanent更改爲permanent = False。如果您使用的是Django 1.9+,則可以完全刪除該行,因爲它默認爲False

否則,瀏覽器會記得重定向到login視圖,而不請求爲退出網址,所以你會保持登錄狀態。

您的基於功能視圖返回一個重定向到一個相對URL 「登陸」的時刻(如/logout//logout/login您可以硬編碼的URL,反向鏈接,或使用redirect快捷方式,其反轉的網址給你:。

return HttpResponseRedirect('/login/') 
return HttpResponseRedirect(reverse('login')) 
return redirect('login') 
+0

謝謝,我改變了它,但它仍然不起作用等。 – ikreb

+0

您的瀏覽器可能會在您進行更改之前緩存重定向。添加一些打印/日誌記錄以確保視圖實際上被調用。 – Alasdair

+0

您的權利,Django不會調用LogoutView的get函數。你有一個想法,爲什麼不呢?我的鏈接是''Logout'' – ikreb

1

您輸入了錯誤的logout。這是一個視圖 - 您在視圖中導入的內容是from django.contrib.auth import logout

+0

謝謝,我改變了它,但它仍然不起作用 – ikreb