2016-04-15 6 views
-1

Gibt es eine Funktion oder ein globales Objekt, über das ich von überall im Django-Projekt auf den aktuell angemeldeten Benutzer zugreifen kann? Wenn nicht, was wird die Problemumgehung sein?Greifen Sie auf den aktuell angemeldeten Benutzer von überall im Code zu

+0

Ich bin ziemlich sicher, dass dies in Teil 1 oder 2 des Tutorials behandelt wird. – Sayse

+0

@Sayse Es ist absolut klar, wie man von den Ansichten oder Vorlagen auf das Benutzerobjekt zugreift. Aber ich habe separate utils.py Datei mit unterstützenden Funktionen, wo einige von ihnen Zugriff auf Benutzerobjekt erfordern. Wenn Sie immer noch denken, ich vermisse das aus dem Tutorial, zeigen Sie bitte – AmirM

Antwort

-3

Auf Vorlagen

{{ user }} 

auf views.py

request.user 
+0

In keiner Weise ist dies eine Antwort auf OP-Frage überhaupt. – kevr

1

Nein ist es nicht. Django dreht sich alles um Anfragen und Antworten. Der Benutzer ist spezifisch für eine bestimmte Anfrage. Wenn Sie eine Anfrage haben, können Sie als request.user auf den Benutzer zugreifen. Sonst, nein, das kannst du nicht.

+0

danke. Gefunden, dass eine der Lösung wird benutzerdefinierte Middleware-Klasse zu schreiben, wie hier [https://blndxp.wordpress.com/2016/03/04/django-get-current-user-anywhere-in-your-code demonstriert -verwende-eine-Middleware /). Works für mich – AmirM

+0

siehe meinen Kommentar zu der Antwort, die benutzerdefinierte Middleware schlägt, gibt es einen guten Grund, Benutzer ist kein globales Objekt, da einige Teile des Codes sogar aus Web-Kontext funktionieren sollte –

0

Gefunden this solution. Danach müssen Sie Ihre neue benutzerdefinierte Middleware-Klasse MIDDLEWARE_CLASSES in den Einstellungen hinzufügen

+1

Es ist natürlich möglich, zu hacken um und expose Anfrage als global. Das Problem bei diesem Ansatz besteht darin, dass der Benutzer von Natur aus anforderungsspezifisch ist. Wenn Sie beispielsweise einen Benutzer im Moduscode verwenden, wird Ihr Modellcode möglicherweise nicht in einem Kontext geladen, in dem kein Benutzer vorhanden ist (z. B. django-Konsole). –

Verwandte Themen