2024-04-20 03:16:07 发布
网友
我正在查看this website,但似乎不知道怎么做,因为它不起作用。我需要检查当前站点用户是否已登录(经过身份验证),并正在尝试:
request.user.is_authenticated
尽管确定用户已登录,但它只返回:
>
我可以执行其他请求(来自上面url的第一部分),例如:
request.user.is_active
返回一个成功的响应。
Django 1.10+
使用属性,而不是方法:
if request.user.is_authenticated: # <- no parentheses any more! # do something if the user is authenticated
Django 2.0中不赞成使用相同名称的方法,Django文档中不再提到该方法。
CallableBool
return HttpResponse(json.dumps({ "is_authenticated": request.user.is_authenticated() }), content_type='application/json')
更新到属性request.user.is_authenticated后,引发异常TypeError: Object of type 'CallableBool' is not JSON serializable。解决方案是使用JsonResponse,它可以在序列化时正确处理CallableBool对象:
TypeError: Object of type 'CallableBool' is not JSON serializable
return JsonResponse({ "is_authenticated": request.user.is_authenticated })
Django 1.10+更新:is_authenticated现在是Django 1.10中的一个属性。为了向后兼容,该方法仍然存在,但将在Django 2.0中删除。
is_authenticated
适用于Django 1.9及以上版本:
is_authenticated是一个函数。你应该这样称呼它
if request.user.is_authenticated(): # do something if the user is authenticated
正如Peter Rowell所指出的,可能会让您绊倒的是,在默认的Django模板语言中,您不需要在括号上加上调用函数。所以您可能在模板代码中看到了类似的内容:
{% if user.is_authenticated %}
然而,在Python代码中,它确实是User类中的一个方法。
User
以下程序块应有效:
{% if user.is_authenticated %} <p>Welcome {{ user.username }} !!!</p> {% endif %}
Django 1.10+
使用属性,而不是方法:
Django 2.0中不赞成使用相同名称的方法,Django文档中不再提到该方法。
注意,对于Django 1.10和1.11,属性的值是一个
CallableBool
,而不是一个布尔值,这可能会导致一些奇怪的错误。 例如,我有一个返回JSON的视图更新到属性
request.user.is_authenticated
后,引发异常TypeError: Object of type 'CallableBool' is not JSON serializable
。解决方案是使用JsonResponse,它可以在序列化时正确处理CallableBool对象:Django 1.10+更新:
is_authenticated
现在是Django 1.10中的一个属性。为了向后兼容,该方法仍然存在,但将在Django 2.0中删除。适用于Django 1.9及以上版本:
is_authenticated
是一个函数。你应该这样称呼它正如Peter Rowell所指出的,可能会让您绊倒的是,在默认的Django模板语言中,您不需要在括号上加上调用函数。所以您可能在模板代码中看到了类似的内容:
然而,在Python代码中,它确实是
User
类中的一个方法。以下程序块应有效:
相关问题 更多 >
编程相关推荐