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

Django默认认证配置下视图AllowAny权限不生效如何解决

问题原因
  • 属性配置位置错误:Django REST Framework的authentication_classes、permission_classes是视图类的类属性,需要直接定义在类的作用域下才能被框架初始化时识别生效。你当前将这两个属性写在了post方法内部,框架读取配置时只会沿用全局settings.py中的认证、权限规则,导致AllowAny配置不生效。
  • 元组语法错误:即使配置位置正确,(TokenAuthentication)、(AllowAny)的写法也不会被Python识别为元组,只会被判定为单个类对象。单元素元组需要在末尾添加逗号,写为(TokenAuthentication,)、(AllowAny,),也可以直接用列表格式避免该问题。
解决方案

调整视图类的属性配置位置,修正后的代码如下:

from rest_framework.permissions import AllowAny
from rest_framework.authentication import TokenAuthentication

class EnquiryCrudPost(APIView):
    # 类属性定义在类作用域下,不要写在方法内部
    authentication_classes = (TokenAuthentication,)
    permission_classes = (AllowAny,)
    
    def post(self, request):
        UserData = request.data
        if UserData:
            try:
                NewUserData = Enquiry.objects.create()
                # 剩余业务逻辑
                ..........

如果该接口完全不需要任何身份认证校验,也可以直接将authentication_classes设为空元组/列表,减少不必要的校验逻辑:authentication_classes = []

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 16:45:01