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%未经过身份验证。
如何解决此问题?
答案 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