您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

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

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

auth中间件添加user属性request就是实例SimpleLazyObjectSimpleLazyObject本身是的子类LazyObjectLazyObject如实际代码所述:

一个类的包装器,可用于延迟所包装类的实例化

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

Go 2022/1/1 18:21:07 有290人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶