mgP*_*ePe 5 python authentication django templates django-registration
我正在使用django-registration,只是设置它.
{{user.is_authenticated }}
Run Code Online (Sandbox Code Playgroud)
是的,即使我已经去了/ accounts/logout /并将用户注销了.
{{user.is_anonymous }}
Run Code Online (Sandbox Code Playgroud)
也返回true.根据django docs的说法,这两者应该是不同的:
is_anonymous:始终返回False.这是区分User和AnonymousUser对象的一种方法.通常,您应该更喜欢将is_authenticated()用于此方法.
和
is_authenticated:始终返回True.这是一种判断用户是否已通过身份验证的方法.这并不意味着任何权限,也不会检查用户是否处于活动状态 - 它仅表示用户提供了有效的用户名和密码.
我正在使用django-registration附带的标准视图,但尚未触及它们.在tempalate我有以下代码:
{% if user.is_authenticated %}
{% user }}
{% if user.is_anonymous %}
is anonymous
{% endif $}
{% else %}
gotta login
{% endif %}
Run Code Online (Sandbox Code Playgroud)
问题出在哪里?我会非常感激的!
更新:我注意到在主页上,它都是is_authenticated,id_anonymous返回True,而如果我在登录前进入/ accounts/login,只有is_anonymous返回true应该是.而且,在主页上,如果有帮助,我有以下视图:
def home(request):
return render_jinja(request, 'index.html', blah = 'ga')
Run Code Online (Sandbox Code Playgroud)
更新2:print(request.user.is_authenticated())给出False.然后,我有:
return render_jinja(request, 'index.html', blah = 'ga')
Run Code Online (Sandbox Code Playgroud)
在模板中,user.is_authenticated返回FALSE.
更新3:如果我使用render_to_response而不是render_jinja,一切都很好.仍然不知道如何解决这个问题:(
ist*_*ble 11
看起来你想要一次弄清楚两件事; 使用jinja模板的正确方法是什么,以及User/AnonymousUser的处理方式是什么.也许试着一次找出这些问题.
我没有使用jinja的经验,但您可能需要检查并确保将jinja和django模板语法之间的差异考虑在内.我所知道的最大区别是方法调用需要显式括号.因此,示例中的is_authenticated和is_anonymous调用需要括号.
Jinja style {{ user.is_authenticated() }}
Django style {{ user.is_authenticated }}
Run Code Online (Sandbox Code Playgroud)
如果这不能解决问题,请尝试安装django-debug-toolbar并查看模板的上下文.检查并查看是否user
为None或对象(User或AnonymousUser).
您还可以阅读AnonymousUser,并查看在文档中检查经过身份验证的用户的示例.简而言之,对于AnonymousUser对象,is_anonymous()始终返回True而不是False,而is_authenticated()始终返回False而不是True.