我遇到了一个问题,我分配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中还有什么其他行为呢?我也没有在文档中看到这一点。
因此,具有django超级人类知识的人可以提供一些清晰度吗?
该auth
中间件添加user
到属性request
就是实例SimpleLazyObject
。SimpleLazyObject
本身是的子类LazyObject
。LazyObject
如实际代码所述:
另一个类的包装器,可用于延迟所包装类的实例化
SimpleLazyObject
只是通过传入的方法(在这种情况下为)设置该类(的_wrapped属性on LazyObject)get_user。这是该方法的代码:
def get_user(request):
if not hasattr(request, '_cached_user'):
request._cached_user = auth.get_user(request)
return request._cached_user
它本身实际上只是一个包装器auth.get_user
,它启用了一种缓存机制。因此,这实际上是最终运行的:
def get_user(request):
from django.contrib.auth.models import AnonymousUser
try:
user_id = request.session[SESSION_KEY]
backend_path = request.session[BACKEND_SESSION_KEY]
backend = load_backend(backend_path)
user = backend.get_user(user_id) or AnonymousUser()
except KeyError:
user = AnonymousUser()
return user
因此,这里真正要进行的request.user
就是模棱两可,直到将其实际用于某件事为止。这很重要,因为它允许它根据当前的身份验证状态进行调整。如果你在身份验证之前访问它的属性,它将返回一个实例AnonymousUser
,但如果你先进行身份验证然后访问它,则将返回的实例User
。
问题内容: 如果可能,如何举例说明如何实现JNDI的用法? 问题答案: JNDI是Java命名和目录接口。它用于分离应用程序 开发人员 和应用程序 部署 人员 的关注点。在编写依赖于数据库的应用程序时,无需担心用于连接该数据库的用户名或密码。JNDI允许开发人员为数据库命名,并依靠部署者将该名称映射到数据库的实际实例。 例如,如果您要编写在Java EE容器中运行的代码,则可以编写此代码来获取JN
问题内容: 我正在阅读angular2引用,发现了这个。我想知道以下参数是什么意思? 问题答案: 该文件对应于TypeScript编译器(tsc)的配置。 这些链接可以为您提供有关这些属性的详细信息: http://www.typescriptlang.org/docs/handbook/tsconfig-json.html http://json.schemastore.org/tsconfig
问题内容: 在Python 3.3中,向该模块添加了一个类: 提供ChainChain类,用于快速链接许多映射,因此可以将它们视为一个单元。它通常比创建新字典并运行多个update()调用要快得多。 例: 它是由动机这个问题,并予以公布的这一个(没有创建)。 据我了解,它是拥有额外字典并使用s进行维护的替代方法。 问题是: 涵盖了哪些用例? 有现实世界的例子吗? 是否在切换到python3的第三方
问题内容: 仅在包装内提供。它继承自,并且只有一个子类(),该子类仅可从包内部使用。 问题答案: 来源。 我猜想MutableBigInteger在内部用于BigInteger繁重的计算,但由于频繁的重新分配而减慢了计算速度。我不确定为什么它不作为java.math的一部分导出。也许对可变值类别有些厌恶? 为了澄清“可变”: 标准BigInteger在整个生命周期中都有一个值,给定两个BigInt
我们使用Veracode静态代码分析来发现和修复代码漏洞。一个反复出现的主题是,他们引用ESAPI作为修复它们的推荐解决方案,例如CW117(如何修复Veracode CWE 117(日志的不正确输出中和)) 然而,我真的不明白拥有一个独立的库有什么意义,它只是在其他库之上的某种安全层。如果一个库(如日志API)有漏洞,我为什么要首先使用它?我会为那个特定的开源社区做出贡献并修复那里的漏洞。或者使
我几天前听说了Docker的事,想过去看看。 但事实上,我不知道这个“容器”的用途是什么? 什么是容器? 它能取代一个专门用于开发的虚拟机吗? 简单地说,在公司中使用Docker的目的是什么?主要的优势?