我遇到了一个问题,我将request.user
赋值给一个变量prior_user
,然后进行身份验证,然后检查是否request.user != prior_user
。我预期他们不同,并且prior_user
应该包含`AnonymousUser`。令我惊讶的是,他们是相同的。
示例代码:
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知识的人能提供一些澄清吗?