Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Some internals of Django auth middleware

Tags:

python

django

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?

like image 769
maxp Avatar asked Mar 01 '23 19:03

maxp


1 Answers

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.

like image 199
Alex Koshelev Avatar answered Mar 11 '23 12:03

Alex Koshelev