2010-11-28 90 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()}}