'AnonymousUser' 对象不可迭代

'AnonymousUser' object is not iterable

if not request.user.is_authenticated:
    return None

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

此代码应该 return None,如果我没有登录并尝试调用它。但正如我从堆栈跟踪中看到的那样,它在这一行崩溃并出现错误“'AnonymousUser' object is not iterable”:

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

我正在以隐私模式浏览以下页面,所以我 100% 未通过身份验证。

如何解决这个问题?

在 Django 1.9 及更早版本中,is_authenticated() 是一个方法,您必须调用它。

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

忘记调用方法很容易出错。在您的情况下,它会导致错误,但在其他情况下,它可能允许用户访问他们不应该访问的数据。从 Django 1.10 开始,is_authenticated 正在更改为 属性 以防止出现这种情况。

如果您尝试以访客用户身份登录,则可能会出现此错误。在我的项目中,我试图在免费、企业和专业的基础上提供会员资格,但我遇到了同样的错误。

所以替换

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

return ClientProfile.objects.filter().first()

我使用另一种方法

from django.contrib.auth.models import AnonymousUser

user = request.user if type(request.user) is not AnonymousUser else None
try:
    ClientProfile.objects.get(user=user)
except ClientProfile.DoesNotExist:
    pass