代码之家  ›  专栏  ›  技术社区  ›  maxp

django-auth中间件的一些内部结构

  •  4
  • maxp  · 技术社区  · 17 年前

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

    class AuthenticationMiddleware(object):
        def process_request(self, request):
            assert hasattr(request, 'session'), "requires session middleware"
            request.__class__.user = LazyUser()
            return None
    

    请告诉我为什么要这样的表格 请求。 _.user=lazyuser()。 用过了吗? 为什么不只是 request.user=lazyuser()。 ?

    我知道什么 _属性的意思是,但是当我在实例变量下直接赋值时会更好。我哪里错了?

    2 回复  |  直到 17 年前
        1
  •  9
  •   Alex Koshelev    17 年前

    LazyUser 是描述符类。根据 documentation 它只能是类属性,不能是实例一:

    例如, a.x 具有以开头的查找链 a.__dict__['x'] 然后 type(a).__dict__['x'] 并继续通过 type(a) 不包括元类。

        2
  •  -1
  •   SingleNegationElimination    17 年前

    这将影响 request 创建了。所有这些实例都将 user 特别的属性 LazuUser 不需要在每个人之后进行更改 请求 已实例化。