Объект 'AnonymousUser' не является итерационным

if not request.user.is_authenticated:
    return None

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

этот код должен возвращать None, если я не вошел в систему и не пытаюсь его вызвать. Но, как я вижу из stacktrace, он падает с ошибкой "объект" AnonymousUser "не является итерационным" в этой строке:

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

Я просматриваю следующую страницу в частном режиме, поэтому я на 100% не аутентифицирован.

Как исправить эту проблему?

1 ответов


в Django 1.9 и ранее, is_authenticated() - это метод, вы должны вызвать его.

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

Это простая ошибка, чтобы забыть вызвать метод. В вашем случае это вызывает ошибку, но в других случаях это может позволить пользователям иметь доступ к данным, которые они не должны. Из Джанго 1.10, is_authenticated изменяется на свойство, чтобы предотвратить это.