Django auth中间件的一些内部

时间:2009-04-20 03:02:36

标签: python django

在django.contrib.auth中间件中 我看到了代码:

class AuthenticationMiddleware(object):
    def process_request(self, request):
        assert hasattr(request, 'session'), "requires session middleware"
        request.__class__.user = LazyUser()
        return None
请告诉我为什么会有这样的表格     request._ class _.user = LazyUser() 用过的? 为什么不呢     request.user = LazyUser() ?

我知道_ class _属性意味着什么,但是因为我对实例变量的直接赋值会更好。哪里我错了?

2 个答案:

答案 0 :(得分:9)

LazyUser是描述符类。根据{{​​3}},它只能是类属性而不是实例1:

  

例如,a.x的查询链以a.__dict__['x']开头,然后是type(a).__dict__['x'],并继续通过type(a)的基类除了元类。

答案 1 :(得分:-1)

这会影响request的创建方式。所有此类实例都将具有user属性作为特定LazuUser,而无需在每个request实例化后进行更改。