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

Django REST Framework中Get接口设AllowAny仍报401未授权的问题排查

问题原因及解决方法

核心原因

你把permission_classes定义在了get方法内部,Django REST Framework(DRF)只会读取类级别的权限配置,方法内部的这个变量不会被框架识别,所以依然会使用全局默认的权限策略(比如可能全局配置了认证要求),导致返回401未授权错误。

解决方法

将permission_classes移到类的顶层,作为类属性:

from rest_framework.permissions import AllowAny
from rest_framework.response import Response
from rest_framework.views import APIView

class CategoryView(APIView):
    # 移到类级别,DRF才能识别权限配置
    permission_classes = [AllowAny]

    def get(self, request, format=None):
        category = Category.objects.all()
        serializer = CategorySerializer(category, many=True)  
        return Response(serializer.data)

额外排查点

如果修改后仍出现401,可以检查以下内容:

  • 全局权限配置:查看项目settings.py中的REST_FRAMEWORK配置,是否存在强制的认证/权限类,比如:
    REST_FRAMEWORK = {
        'DEFAULT_PERMISSION_CLASSES': [
            'rest_framework.permissions.IsAuthenticated',
        ]
    }
    
    类级别的permission_classes会覆盖全局配置,但如果全局配置了认证类且前端未传认证信息,也可能触发401,不过AllowAny会跳过权限校验,这部分优先级更高。
  • 前端请求循环问题:你的useEffect依赖设置为[category],会导致数据更新后再次触发请求,形成无限循环,建议改为空数组[],仅在组件挂载时请求一次:
    useEffect(()=>{
        axios.get('http://localhost:8000/Category/')
        .then(res=>{
            setCategory(res?.data)
            console.log('category are', res?.data)
        })
        .catch(err=>console.log(err))
    },[])
    

内容的提问来源于stack exchange,提问作者Pramit Khatri

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 13:04:58