在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 _属性意味着什么,但是因为我对实例变量的直接赋值会更好。哪里我错了?
答案 0 :(得分:9)
LazyUser
是描述符类。根据{{3}},它只能是类属性而不是实例1:
例如,
a.x
的查询链以a.__dict__['x']
开头,然后是type(a).__dict__['x']
,并继续通过type(a)
的基类除了元类。
答案 1 :(得分:-1)
这会影响request
的创建方式。所有此类实例都将具有user
属性作为特定LazuUser
,而无需在每个request
实例化后进行更改。