'AnonymousUser'对象不可迭代

时间:2016-05-25 22:22:25

标签: django django-authentication

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%未经过身份验证。

如何解决此问题?

3 个答案:

答案 0 :(得分:15)

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

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

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

答案 1 :(得分:1)

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

所以替换

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

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

答案 2 :(得分:0)

我使用另一种方法

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