我遇到了一个问题,我将request.user
分配给了一个名为prior_user
的变量,然后对用户进行了实质性验证,然后检查了request.user != prior_user
。我期望他们不是一样的,prior_user
应该包含`AnonymousUser。令我惊讶的是,他们是一样的。django:django.utils.functional.SimpleLazyObject的用途?
示例代码:
prior_user = request.user # request object, obtained froma view
authenticate_user(request) # some function that authenticates
print prior_user.username != request.user.username # returns False i.e.they are the same!
我这时才发现prior_user实际上包含django.utils.functional.SimpleLazyObject的一个实例,所以我认为这是某种形式的懒惰查找类型的东西即prior_user的值不抬头直到实际使用。查看源代码,我无法证实这一点。
任何有Django经验的人都可以告诉我发生了什么以及为什么需要它?
这让我有点动摇,因为通常的赋值语句不能像我期望的那样工作,Django中的其他内容也是如此吗?我也没有看到在docs中描述的这种情况。
因此,任何具有django超人类知识的人都可以提供一些清晰度?
谢谢,这对于像我这样的django初学者非常有帮助! – donogood
+1为了解释! – Anoyz