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
相关产品推荐
相关产品推荐

