如何判断Django中request.user是否为AnonymousUser?
正确判断Django中用户是否为AnonymousUser的方法
嘿,我懂你碰到的问题啦!你现在的写法不管用,是因为Django里哪怕用户没登录,request.user也不会是空值,它会返回一个AnonymousUser的实例——所以你用if request.user判断的时候,这个条件永远为真,自然一直打印“not AnonymousUser”啦。
给你两种靠谱的解决办法:
方法一:用is_authenticated属性(推荐)
这是Django官方推荐的方式,request.user.is_authenticated会直接返回布尔值,已登录用户返回True,匿名用户返回False,代码改完是这样:
def get(self, request): if request.user.is_authenticated: print("not AnonymousUser") return Response(data="200", status=HTTP_200_OK) else: # 这里处理匿名用户的逻辑 return Response(data="当前是匿名用户", status=HTTP_401_UNAUTHORIZED)
方法二:直接判断用户类型
如果你想明确判断是不是AnonymousUser,可以用isinstance,不过记得先导入类:
from django.contrib.auth.models import AnonymousUser def get(self, request): if not isinstance(request.user, AnonymousUser): print("not AnonymousUser") return Response(data="200", status=HTTP_200_OK) else: return Response(data="当前是匿名用户", status=HTTP_401_UNAUTHORIZED)
不过这种方法不如第一种简洁,还是优先用is_authenticated哦。
另外提个小建议:如果你的视图只想让已登录用户访问,其实可以直接用DRF的权限类,不用自己写判断逻辑,比如:
from rest_framework.permissions import IsAuthenticated class UserListAPIView(ListAPIView): serializer_class = UserSerializer permission_classes = [IsAuthenticated] # 加这个就行 queryset = User.objects.all() def get(self, request): print("not AnonymousUser") return Response(data="200", status=HTTP_200_OK)
这样匿名用户访问的时候,DRF会自动返回401未授权,不用你自己处理分支啦。
内容的提问来源于stack exchange,提问作者1243916142
相关产品推荐
相关产品推荐

