Wie füge ich dem Django Admin Hooks hinzu, so dass ich eine Funktion ausführen kann, wenn der Benutzer an- oder abmeldet?Hacking Django Admin, Hooks zum Anmelden/Abmelden
Antwort
Aktualisierung: Diese Methode ist seit Django 1.3 veraltet, siehe unten unter Tommy's answer für die Verwendung von Signalen.
Ich war auch auf der Suche nach einer Antwort auf diese und endete einen anderen Weg. Sie können Ihre eigenen Ansichten für das Anmelden und Abmelden verwenden, die einige Aktionen ausführen und dann die Authentifizierungsansichten aufrufen. Zur Anmeldung:
def login(request, *args, **kwargs):
from django.contrib.auth.forms import AuthenticationForm
if request.method == 'POST':
form = AuthenticationForm(data=request.POST)
if form.is_valid():
# login successful
do_something()
from django.contrib.auth.views import login as authlogin
return authlogin(request, *args, **kwargs)
Und für logout:
def logout(request, *args, **kwargs):
do_something()
from django.contrib.auth.views import logout as authlogout
return authlogout(request, *args, **kwargs)
Sie tun können, was die Verarbeitung in Ihrer benutzerdefinierten Ansichten anstelle der do_something Platzhalter mögen, wie Signale aussendet, Anmeldung Login und log -out Zeiten usw.
Schließlich vergessen Sie nicht, Ihre urls.py
zu aktualisieren, um auf Ihre benutzerdefinierten Ansichten zu zeigen.
Ich bin mir nicht sicher, wie ein benutzerdefiniertes Auth-Backend Abmeldeereignisse behandeln kann, als ich schließlich aufgab und dies stattdessen versuchte. Zusätzlich hat dieser Ansatz den Vorteil, das Objekt request
anstelle nur des Benutzers verfügbar zu machen.
Django hat leider keine Signale auf, die Ereignisse senden .... Aber Sie könnten Ihre eigenen AuthorizationBackend machen, dass Sie so tun können:
from django.dispatch import Signal
post_login = Signal(providing_args=['user'])
from django.contrib.auth.backends import ModelBackend
from django.contrib.auth.models import User
class AuthSignalBackend(ModelBackend):
def authenticate(self, username=None, password=None):
try:
user = User.objects.get(username=username)
if user.check_password(password):
post_login.send(sender=None, user=user)
return user
except User.DoesNotExist:
return None
def login_handler(sender, **kwargs):
print "logging in..."
post_login.connect(login_handler)
es Damit Sie AUTHENTICATION_BACKENDS = (myapp.mymodule.AuthSignalBackend',)
in Ihrem setzen haben settings.py!
Ich habe gerade dieses Thema, wenn nach einer Lösung gesucht, damit andere auch vielleicht ...
Lazerscience Antwort so weit sieht gut aus, aber ich merke auch, dass der Django Kern Devs a patch angenommen hat, dass ein Signal auf Protokoll verursachen Ein-/Ausloggen.
Dies könnte eine elegantere Lösung sein, sobald es zu einer offiziellen Django-Veröffentlichung wird.
Und als Referenz, die Dokumente auf Signals.
An- und Abmeldesignale sind Teil der offiziellen Version ab 1.3: [Referenz] (https://docs.djangoproject.com/en/1.3/topics/auth/#login-and-logout-signals) – Federico
Ab Django 1.3 generiert das Auth-Framework Signale für das Anmelden und Abmelden, die verwendet werden können, um Ihren eigenen Hook bereitzustellen.
Sie haben Ihre Funktion zum django.contrib.auth.signals.user_logged_in Signal verbinden, wie:
def fun(sender, **kwargs):
print "do your custom stuff here"
from django.contrib.auth.signals import user_logged_in
user_logged_in.connect(fun)
- 1. Admin-Side-Hooks funktionieren nicht (WordPress)
- 2. Django: Werte global zum Admin-Kontext hinzufügen
- 3. Django Admin
- 4. Hacking/Cracking Deontologie
- 5. Benutzereinstellungen in django admin
- 6. Django - Admin - Obligatorische Inlines
- 7. Django Admin-Auswahlfeld
- 8. ManyToManyFields in Django Admin
- 9. Django admin: Benutzerdefinierte Bestellung
- 10. Django-Bedingungs-Admin list_editable
- 11. Sinatra Web Admin (wie Django Admin)
- 12. django: mit admin datepicker
- 13. Beziehungen in Django Admin
- 14. Django-Admin-Listenfilter
- 15. django Admin-Seite
- 16. Django Admin - Sortierung list_filter
- 17. django jquery Admin Probleme
- 18. django überschreiben admin template
- 19. Django Admin Sortierreihenfolge
- 20. Django Admin-Fehler
- 21. Django Admin, benutzerdefinierte Fehlermeldung?
- 22. Django Admin ManyToMany Zwischenmodell
- 23. Django Admin + Filter horizontal?
- 24. Django fix Admin Plural
- 25. Django Admin SelectMultiple Widget
- 26. Django admin url.py
- 27. Weird django admin importerror
- 28. überschreiben Authentifizierungsmethode - Django admin
- 29. Django - Admin: list_display TextField
- 30. Django Admin Fieldsets
auch: den Benutzer bei der Anmeldung eingewickelt Ansicht zuzugreifen, verwenden Sie 'form.get_user()' , da das 'request' Objekt' AnonymousUser' zurückgibt. – rlafuente
Als verspätete Folge, und wie von Tommy bemerkt, fügte Django 1.3 [Login- und Logout-Signale] (https://docs.djangoproject.com/en/dev/topics/auth/#login-and-logout-signals) hinzu Die Auth-Anwendung bietet eine einfache Lösung für die Frage und macht diese Methode obsolet. – rlafuente
Doh, bemerkte gerade, dass Federico das auch erwähnte. Prost alles! – rlafuente