栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

django:django.utils.functional.SimpleLazyObject的目的是什么?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

django:django.utils.functional.SimpleLazyObject的目的是什么?

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



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/387828.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号