You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django中'AnonymousUser'对象无'group'属性错误求助及排查

问题排查与解决

错误原因

核心问题是权限类属性名拼写错误:原代码中写的是permissions_classes(多了一个's'),而Django REST Framework要求的正确属性名是permission_classes。这导致权限验证逻辑完全未生效,未登录用户的请求也能进入get_queryset方法,而AnonymousUser对象不存在group属性,触发报错。

另外,即使权限配置正确,也建议在访问用户属性前添加认证状态判断,作为额外安全防护。

修正方案

  1. 修正权限类属性名的拼写错误
  2. 在get_queryset中增加用户认证状态的判断,避免意外场景下的错误

修正后的代码

from django.db.models import Q
from rest_framework import generics, permissions
from .models import Trip
from .serializers import NestedTripSerializer

class TripView(generics.ListCreateAPIView):
    lookup_field = 'id'
    lookup_url_kwarg = 'trip_id'
    serializer_class = NestedTripSerializer
    # 修正属性名:去掉多余的's'
    permission_classes = (permissions.IsAuthenticated,)

    def get_queryset(self):
        user = self.request.user
        # 先验证用户是否已认证,作为额外安全层
        if not user.is_authenticated:
            return Trip.objects.none()
        
        if user.group == 'driver':
            return Trip.objects.filter(
                Q(status=Trip.REQUESTED) | Q(driver=user)
            )
        elif user.group == 'rider':
            return Trip.objects.filter(rider=user)
        return Trip.objects.none()

说明

  • 修正permission_classes后,DRF会在请求进入视图方法前自动拦截未登录用户,直接返回401未授权响应,不会执行get_queryset
  • 添加user.is_authenticated判断是冗余但必要的防护,避免因后续权限配置变更、视图继承等原因导致的认证失效问题

内容的提问来源于stack exchange,提问作者nabraz bhandari

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 06:54:22