2012-04-14 4 views
3

Wie kann ich wissen, ob ein bestimmter Benutzer in Django angemeldet ist (nicht der aktuell anfragende Benutzer)?Wie kann ich wissen, ob ein bestimmter Benutzer, nicht der aktuell anfragende Benutzer, in Django angemeldet ist?

Ich versuchte dies:

user = User.objects.get(username="jon") 
if user.is_authenticated(): 
    print "user logged" 

Aber dies immer wieder True wenn die username abgestimmt.

+1

@linker Nein, es ist kein Duplikat davon. Diese Person hat auf die Funktion verwiesen, sie aber nicht aufgerufen. Rayashi nennt die Funktion eindeutig korrekt. – agf

+1

Wer auch immer abgelehnt - ich denke, das ist eine gute Frage (Ich habe keine Stimmen mehr). Er zeigte, was er versuchte, und erzählte uns, warum das nicht für ihn funktionierte. – agf

+1

Was klassieren Sie als eingeloggt? Wenn Sie dies wissen möchten, möchten Sie meistens wissen, ob sie aktiv sind - nicht nur, wenn sie sich seit dem letzten Login nicht abgemeldet haben. Wenn ja, wie lange seit sie zuletzt eine Seite angesehen haben, zählt aktiv? –

Antwort

1

Es gibt keine eingebaute Methode, um das zu tun, wonach Sie suchen. Es gibt jedoch eine App, die Sie Ihrem Projekt hinzufügen können, damit Sie das tun können, was Sie wollen. Es heißt Django-Tracking und Sie können es hier finden:

EDIT Whoops! Ich bin dazu gekommen, aber im Grunde genommen das, was Mark Lavin gesagt hat.

+0

Sorry .. Ich kann importieren "from tracking.models importieren Besucher" es zurück "Uneingeschränkter Import: Besucher Unbenutzter Import: Besucher" – rayashi

+0

Stellen Sie sicher, dass Python den Ort finden kann, an dem Sie die Tracking-App gespeichert haben. Wenn Sie Eclipse verwenden, sollte dies eine einfache Angelegenheit sein, den Speicherort zu den referenzierten Bibliotheken des Projekts hinzuzufügen. Wenn nicht, dann müssen Sie Ihre 'PYTHONPATH' Systemvariable manuell bearbeiten. – chandsie

4

Die kurze Antwort ist, dass Sie nicht können; zumindest nicht mit etwas, das in Django eingebaut ist. Um zu wissen, ob ein Benutzer in der Datenbank angemeldet ist, fragen Sie im Wesentlichen, ob der Benutzer an eine aktive Sitzung gebunden ist. Sie können jedoch die Sitzungstabelle für die Benutzer-ID nicht abfragen (keine Abfrage aller aktiven Sitzungen), da diese Informationen als gebeizte Daten gespeichert sind. Und selbst wenn Sie dies getan haben, ist das nicht ganz sinnvoll, abhängig davon, wie lange der Sitzungscookie dauert (Standard 2 Wochen).

Was können Sie also tun? Eine Sache, die Sie über den Benutzer abfragen kann, ist das letzte Mal, wenn sie angemeldet Zum Beispiel könnten Sie Benutzer erhalten, die in weniger als 10 Minuten vor zuletzt eingeloggt.

from datetime import datetime, timedelta 
from django.contrib.auth.models import User 

cutoff = datetime.now() - timedelta(minutes=10) 
active = User.objects.filter(last_login__gt=cutoff) 

Eine andere Sache, die Sie tun können, ist dies auf eigene Faust verfolgen . In der Tat gibt es eine App, die genau das nennt django-tracking.

Verwandte Themen