TypeError:“BasePermissionMetaclass”对象在 django Rest 框架中不可迭代

问题描述 投票:0回答:3

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

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)
django django-models django-rest-framework django-forms django-views
3个回答
4
投票

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

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

@permission_classes((IsAuthenticated,)) 

这是要走的路。


0
投票

 'DEFAULT_PERMISSION_CLASSES': ('rest_framework.permissions.AllowAny',)
将以下行添加到您的
settings.py

事实证明,省略元组中的最后一个逗号会引发错误,因为

'DEFAULT_PERMISSION_CLASSES'
需要一个元组


0
投票

只需在列表中添加可迭代的权限即可。

permission_classes = [已验证]

© www.soinside.com 2019 - 2024. All rights reserved.