Ad

Some Internals Of Django Auth Middleware

- 1 answer

In the django.contrib.auth middleware I see the code:

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

Please avdise me why such a form request._ class _.user = LazyUser() used? Why not just request.user = LazyUser() ?

I know what _ class _ attribute means, but as I undersand direct assignment to instance variable will be better. Where I'm wrong?

Ad

Answer

LazyUser is descriptor-class. According to documentation it can be only class attribute not instance one:

For instance, a.x has a lookup chain starting with a.__dict__['x'], then type(a).__dict__['x'], and continuing through the base classes of type(a) excluding metaclasses.

Ad
source: stackoverflow.com
Ad