TypeError:'BasePermissionMetaclass' 对象在 django rest 框架中不可迭代

Posted

技术标签:

【中文标题】TypeError:\'BasePermissionMetaclass\' 对象在 django rest 框架中不可迭代【英文标题】:TypeError: 'BasePermissionMetaclass' object is not iterable in django rest frameworkTypeError:'BasePermissionMetaclass' 对象在 django rest 框架中不可迭代 【发布时间】:2020-10-14 19:00:48 【问题描述】:

我查看了有关此问题的其他问题,他们的问题在 REST_FRAMEWORK = ... settings.py 文件中的值中。我的有什么错误吗?

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
 
    'api_basic',# this is my app that uses authtokens
    'rest_framework',
    'rest_framework.authtoken',

]

REST_FRAMEWORK = 
    'DEFAULT_AUTHENTICATION_CLASSES': [
        'rest_framework.authentication.TokenAuthentication',
    ],
    'DEFAULT_PERMISSION_CLASSES': [
        'rest_framework.permissions.IsAuthenticated',
    ],


查看:

@api_view(['GET', ])
@permission_classes(IsAuthenticated)
def api_hero(request, name):
    try:
        character = Hero.objects.get(name=name)
    except:
        return Response(status=status.HTTP_404_NOT_FOUND)
    serializer = serializers.HeroSerializer(character)
    return Response(serializer.data)

【问题讨论】:

展示你的观点。 @Anonymous 完成。 【参考方案1】:

所以我自己找到了答案。问题就在眼前

@permission_classes(IsAuthenticated) 
here permission classes arguments should be a tuple.
so:

@permission_classes((IsAuthenticated,)) 

是要走的路。

【讨论】:

以上是关于TypeError:'BasePermissionMetaclass' 对象在 django rest 框架中不可迭代的主要内容,如果未能解决你的问题,请参考以下文章

drf的权限扩充

def权限,频率,分页

DRF权限和频率限制

权限组件

Rest Framework 之权限组件

PMS权限管理和鉴权过程