2010-11-28 92 views
5

後is_anonymous都返回真我使用Django的登記,並設置好它。Django的:is_authenticated和註銷

{{user.is_authenticated }} 

是真的,即使我已經去/ accounts/logout /並且登出了用戶。

{{user.is_anonymous }} 

也返回true。根據django文檔,這兩個應該是不同的:

is_anonymous:總是返回False。這是區分User和AnonymousUser對象的一種方式。通常,您應該更喜歡使用is_authenticated()來使用此方法。

is_authenticated:總是返回true。這是判斷用戶是否已通過身份驗證的一種方式。這並不意味着任何權限,並且不檢查用戶是否處於活動狀態 - 它只是表明用戶提供了一個有效的用戶名和密碼。

我正在使用django註冊並沒有觸及它們的標準視圖。在tempalate我有以下代碼:

{% if user.is_authenticated %} 
{% user }} 
{% if user.is_anonymous %} 
    is anonymous 
{% endif $} 
{% else %} 
    gotta login 
{% endif %} 

問題在哪裏?我會非常感謝!

更新: 我注意到,在主頁上,它既is_authenticated和id_anonymous返回True,而如果我登錄之前去/ accounts /登錄,只有is_anonymous返回true,因爲它應該是。而且,在網頁上,我有以下的看法是否有幫助:

def home(request): 
    return render_jinja(request, 'index.html', blah = 'ga') 

更新2: 打印(request.user.is_authenticated())提供虛假。然後,我有:

return render_jinja(request, 'index.html', blah = 'ga') 

並且在模板中,user.is_authenticated返回FALSE。

更新3: 如果我選擇render_to_response使用,而不是render_jinja,一切都很好。還是不知道如何解決這個問題,雖然:(

+0

恐怕我無法在新創建的項目和應用程序中重現此行爲。你使用的是哪個版本的Django?你如何登錄用戶,然後登錄用戶? – 2010-11-28 19:44:57

+0

如果你告訴我如何檢查我的django版本,我將非常樂意檢查!拍攝在黑暗中 - 1.2 – mgPePe 2010-11-28 21:16:42

+0

因爲我使用這個開源的Django的註冊應用程序,我登錄帳戶/登錄/和註銷帳戶/註銷。如果你告訴我如何在評論中粘貼代碼,我可以從這些鏈接粘貼視圖 – mgPePe 2010-11-28 21:18:15

回答

11

好像你正在試圖找出兩件事情一次;什麼是使用jinja模板和wh的正確方法at是與User/AnonymousUser的交易。也許試着一次找出這些問題。

我有神社沒有經驗,但你可能要檢查並確保你正在服用differences between jinja and django template syntax考慮。我所知道的最大區別是方法調用需要明確的括號。所以你的例子中的is_authenticated和is_anonymous調用需要括號。

Jinja style {{ user.is_authenticated() }} 
Django style {{ user.is_authenticated }} 

如果不解決這個問題,嘗試安裝django-debug-toolbar並看看您的模板的上下文。檢查並查看user是None還是一個對象(User或AnonymousUser)。

您也可以閱讀AnonymousUser,並在文檔中查看checking for an authenticated user的示例。簡而言之,對於AnonymousUser對象,is_anonymous()總是返回True而不是False,而is_authenticated()總是返回False而不是True。

4

拍擊的頭我讀的地方:

如果user.is_authenticated: ....#總是如此,因爲它是一種方法, !

等等,而不必{{user.is_authenticated}}模板,它應該是{{user.is_authenticated()}}