2016-05-25 13 views
6
if not request.user.is_authenticated: 
    return None 

try: 
    return ClientProfile.objects.get(user=request.user) 
except ClientProfile.DoesNotExist: 
    return None 

Dieser Code sollte keine zurückgeben, wenn ich nicht angemeldet bin und versuche, es aufzurufen. Aber wie ich von stacktrace sehen, stürzt es mit Fehler „‚AnonymousUser‘Objekt nicht iterable ist“ auf dieser Linie:'AnonymousUser' Objekt ist nicht iterierbar

return ClientProfile.objects.get(user=request.user) 

Ich bin gerade auf der folgenden Seite im Privatmodus, also bin ich 100% nicht authentifiziert .

Wie behebt man dieses Problem?

Antwort

9

In Django 1.9 und früher, is_authenticated() ist eine Methode, müssen Sie es nennen.

if not request.user.is_authenticated(): 
    ... 

Es ist ein einfacher Fehler zu vergessen, die Methode aufzurufen. In Ihrem Fall verursacht dies einen Fehler, in anderen Fällen können Benutzer Zugriff auf Daten erhalten, die sie nicht benötigen. Von Django 1.10 wird is_authenticated in eine Eigenschaft geändert, um dies zu verhindern.

+0

Oh, danke. Kopieren aus dem Vorlagencode eingefügt :) – arts777