Django DRF调用GET接口报'type' object is not iterable如何解决
问题根因
错误出自settings.py中DRF的权限配置存在Python语法问题:单元素包裹在圆括号中时,末尾不加逗号不会被识别为元组,只会被判定为单个元素对象。
你配置的DEFAULT_PERMISSION_CLASSES最终被解析为单个权限类(IsAuthenticated类本身,属于type类型),而非包含权限类的可迭代序列,DRF遍历权限类执行校验时无法迭代单个type对象,就抛出了对应报错。
修复方案
修改settings.py中的REST_FRAMEWORK配置,给DEFAULT_PERMISSION_CLASSES的单元素末尾添加逗号,使其被正确识别为元组:
REST_FRAMEWORK = { 'DEFAULT_AUTHENTICATION_CLASSES': ( 'rest_framework.authentication.TokenAuthentication', 'rest_framework.authentication.SessionAuthentication' ), 'DEFAULT_PERMISSION_CLASSES': ( 'rest_framework.permissions.IsAuthenticated', # 末尾添加逗号 ) }
也可以直接用列表写法规避单元素元组的语法坑:
REST_FRAMEWORK = { 'DEFAULT_AUTHENTICATION_CLASSES': [ 'rest_framework.authentication.TokenAuthentication', 'rest_framework.authentication.SessionAuthentication' ], 'DEFAULT_PERMISSION_CLASSES': [ 'rest_framework.permissions.IsAuthenticated' ] }
验证
修改配置后重启服务,再次发起/polls/接口的GET请求即可正常返回结果,500错误消失。
内容的提问来源于stack exchange,提问作者Vakindu
相关产品推荐
相关产品推荐

