django:is_authenticated和is_Anonymous都在注销后返回true
-
29-09-2019 - |
题
我正在使用django注册,然后将其设置。
{{user.is_authenticated }}
是真的,即使我已经去了/帐户/注销/并记录了用户。
{{user.is_anonymous }}
也返回正确。根据Django文档的说法,这两个应该有所不同:
is_Anonymous:始终返回false。这是区分用户和匿名对象的一种方式。通常,您应该更喜欢使用is_authenticatienated()而不是此方法。
和
IS_Authenticated:始终返回true。这是一种判断用户是否已进行身份验证的方法。这并不意味着任何权限,也不会检查用户是否处于活动状态 - 它仅表示用户提供了有效的用户名和密码。
我正在使用Django注册随附的标准视图,但尚未触摸它们。在Tempalate中,我有以下代码:
{% if user.is_authenticated %}
{% user }}
{% if user.is_anonymous %}
is anonymous
{% endif $}
{% else %}
gotta login
{% endif %}
问题在哪里?我真的很感激!
更新:我已经注意到,在主页上,它既iS_Authenticatiencatiencated and ID_Anonymous return true true true true true true true,而如果我访问 /帐户 /登录之前,则只有IS_Anonymous返回true true。而且,在主页上,我有以下视图是否有帮助:
def home(request):
return render_jinja(request, 'index.html', blah = 'ga')
更新2:print(request.user.is_authenticated())给出false。然后,我有:
return render_jinja(request, 'index.html', blah = 'ga')
在模板中,user.is_authenticated返回false。
更新3:如果我使用render_to_response,而不是render_jinja,则一切都很好。仍然不知道如何解决这个问题:(
解决方案
似乎您正在尝试一次弄清楚两件事。什么是使用Jinja模板的正确方法,以及与用户/匿名者的处理方式。也许尝试一次弄清楚这些问题。
我没有Jinja的经验,但您可能需要检查并确保您正在服用 Jinja和Django模板语法之间的差异 考虑到。我知道的最大区别是方法调用需要明确的括号。因此,您的示例中需要括号中的is_authenticatiencatiencated和is_Anonymous调用。
Jinja style {{ user.is_authenticated() }}
Django style {{ user.is_authenticated }}
如果那无法解决问题,请尝试安装 django-debug-toolbar 并查看模板的上下文。检查并查看是否 user
是一个或一个对象(用户或匿名者)。
您也可以阅读 匿名者 并看到一个例子 检查身份验证的用户 在文档中。简而言之,对于匿名对象is_anonymous()总是返回true而不是false,并且is_authenticatiencatiencatiencatiencation()始终返回false而不是true。
其他提示
在头上sm。我在某个地方读了:
如果user.is_authenticated:....#始终是正确的,因为这是一种方法!
因此,它不应在模板中{{user.is_authenticatiencatiencation}}中,而应为{{user.is_authenticated()}}}