Wie überprüfe ich, ob dieser Benutzer anonym oder tatsächlich ein Benutzer auf meinem System ist?

81
def index(request):
    the_user = request.user

Woher weiß ich in Django, ob es sich um einen echten Benutzer handelt oder nicht? Ich habe es versucht:

if the_user: "AnonymousUser" ist jedoch auch dann vorhanden, wenn sich niemand anmeldet. Es wird also immer true zurückgegeben, und dies funktioniert nicht.

TIMEX
quelle

Antworten:

136

Sie können überprüfen, ob die request.user.is_anonymousRücksendung erfolgt True.

Daniel DiPaolo
quelle
20
views.pyrequest.user.is_anonymous(){{user.is_anonymous}}
Beachten
11
Scheint wie in Django 1.9 ist es eher is_authenticated(): siehe docs.djangoproject.com/de/1.9/topics/auth/default/…
Paolo Stefan
11
von Django 1.10 ist is_anonymous keine Methode mehr (nur eine Eigenschaft)
maxbellec
2
Ich muss Paolo Stefan zustimmen, die Methode, die Sie verwenden möchten, ist is_authenticated(). Siehe auch thegarywilson.com/blog/2006/is_authenticated-vs-is_anonymous
Al Sweigart
3
Die aktuelle Empfehlung lautet: Verwenden Sie request.user.is_authenticateddieses Attribut in Django 1.10+ genauso wie is_anonymousjetzt - siehe docs.djangoproject.com/de/dev/ref/contrib/auth/… . Beachten Sie, dass, wenn Sie auch Django Guardian verwenden, diese Attribute nicht das tun, was Sie denken - siehe django-guardian.readthedocs.io/en/stable/configuration.html
rhunwicks
18

Eine Alternative zu

if user.is_anonymous():
    # user is anon user

Testen Sie, um festzustellen, wie die ID des Benutzerobjekts lautet:

if user.id == None:
    # user is anon user
else:
    # user is a real user

Siehe https://docs.djangoproject.com/de/dev/ref/contrib/auth/#anonymous-users

Leifos
quelle
4
scheint eine schlechte Idee. user.is_anonymous () wird in den neuen Versionen weiterarbeiten, user.id möglicherweise nicht, abhängig von zukünftigen Implementierungen
maxbellec
Beachten Sie außerdem, dass der anonyme Benutzer bei Verwendung von Django Guardian auch eine ID hat - siehe django-guardian.readthedocs.io/en/stable/… .
Rhunwicks
Und die aktuelle Empfehlung gemäß docs.djangoproject.com/de/dev/ref/contrib/auth/… lautet, User.is_authenticated
rhunwicks
Das funktioniert leider nicht. Es war das erste, was ich versuchte. Scheint, dass der "anonyme" Benutzer bei Verwendung von user == None (und anderen Variationen) angezeigt wird.
Harlin
4

Ich weiß, dass ich hier ein bisschen grabe, aber eine Google-Suche hat mich auf diese Seite gebracht.

Wenn Ihre Ansicht def erfordert, dass der Benutzer angemeldet ist, können Sie den Dekorator @login_required implementieren:

from django.contrib.auth.decorators import login_required

@login_required
def my_view(request):
Karl MW
quelle
Dies funktioniert in der Standard-Anmeldeansicht ohne einige Anpassungen nicht.
Harlin
0

Ich hatte ein ähnliches Problem, außer dass es sich auf einer Seite befand, an die die login_redirect_url gesendet wurde. Ich musste die Vorlage einfügen:

{% if user.is_authenticated %}
    Welcome Back, {{ username }}
{% endif %}
Harlin
quelle