4 Stimmen

Einige Interna der Django Auth Middleware

In der Middleware django.contrib.auth sehe ich den Code:

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

Bitte teilen Sie mir mit, warum ein solches Formular Anfrage._ Klasse _.user = LazyUser() verwendet? Warum nicht einfach request.user = LazyUser() ?

Ich weiß was _ Klasse _-Attribut bedeutet, aber wie ich verstanden habe, ist eine direkte Zuweisung an eine Instanzvariable besser. Wo liege ich falsch?

9voto

Alex Koshelev Punkte 15739

LazyUser ist eine Deskriptor-Klasse. Gemäß Dokumentation es kann nur ein Klassenattribut sein, kein Instanzattribut:

Zum Beispiel, a.x hat eine Nachschlagekette, die mit a.__dict__['x'] entonces type(a).__dict__['x'] und weiter über die Basisklassen von type(a) ohne Metaklassen.

-1voto

Dies wird sich darauf auswirken, wie request s erstellt werden. Alle diese Instanzen haben ihre user als dieses besondere Attribut LazuUser ohne die Notwendigkeit, diese Änderung nach jedem einzelnen request instanziiert wird.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X