is_authenticated为AnonymousUser返回True

Dan*_*mov 4 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.')
Run Code Online (Sandbox Code Playgroud)

为了澄清,Django调试视图正确识别uAnonymousUser:

u   <django.contrib.auth.models.AnonymousUser object at 0x9e76f4cc>
Run Code Online (Sandbox Code Playgroud)

更奇怪的是,模板内部 is_anonymous工作正常:

{% if not request.user.is_authenticated %}
    We are anonymous.
{% endif %}
Run Code Online (Sandbox Code Playgroud)

这是为什么?

Dan*_*man 26

这是一种方法,而不是财产.你需要打电话给它:

if u.is_authenticated():
Run Code Online (Sandbox Code Playgroud)

当然,在模板中,Django 自动为您调用方法.


Mic*_*nor 6

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

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