'AnonymousUser'对象不可迭代

int*_*_32 9 django django-authentication

if not request.user.is_authenticated:
    return None

try:
    return ClientProfile.objects.get(user=request.user)
except ClientProfile.DoesNotExist:
    return None
Run Code Online (Sandbox Code Playgroud)

如果我没有登录并尝试调用它,则此代码应返回None.但正如我从stacktrace中看到的那样,崩溃时出现错误"'AnonymousUser'对象不可迭代"在这一行:

return ClientProfile.objects.get(user=request.user)
Run Code Online (Sandbox Code Playgroud)

我正在以私人模式浏览以下页面,因此我100%未经过身份验证.

如何解决这个问题?

Ala*_*air 17

在Django 1.9及更早版本中,is_authenticated()是一种方法,你必须调用它.

if not request.user.is_authenticated():
    ...
Run Code Online (Sandbox Code Playgroud)

忘记调用该方法是一个容易的错误.在您的情况下,它会导致错误,但在其他情况下,它可能允许用户访问他们不应该访问的数据.从Django 1.10开始,is_authenticated将更改为属性以防止此情况发生.