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.

Antworten:


136

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


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


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):

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 %}
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.