is_authenticated为AnonymousUser返回True

时间:2011-10-27 20:38:58

标签: django django-authentication

当我没有登录时,我正在努力is_authenticated返回True

u = request.user
if u.is_authenticated:
    raise Exception('I am said to be authenticated, but I really am not.')

为了澄清,Django调试视图正确地将u标识为AnonymousUser

u   <django.contrib.auth.models.AnonymousUser object at 0x9e76f4cc>

更奇怪的是,模板内的 is_anonymous效果很好:

{% if not request.user.is_authenticated %}
    We are anonymous.
{% endif %}

为什么?

2 个答案:

答案 0 :(得分:26)

这是method,而不是财产。你需要打电话给它:

if u.is_authenticated():

当然,在模板中,Django calls methods for you会自动显示。

答案 1 :(得分:6)

is_authenticated是一种方法,所以你需要一些括号。否则,u.is_authenticated是函数对象,它是True ish值。

在模板语言中,没有参数的函数被评估为函数,这就是为什么你在那里很好。