我查看了有关此问题的其他问题,他们的问题出在 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)
所以我自己找到了答案。问题就在眼前
@permission_classes(IsAuthenticated)
here permission classes arguments should be a tuple.
so:
@permission_classes((IsAuthenticated,))
这是要走的路。
'DEFAULT_PERMISSION_CLASSES': ('rest_framework.permissions.AllowAny',)
将以下行添加到您的 settings.py
。
事实证明,省略元组中的最后一个逗号会引发错误,因为
'DEFAULT_PERMISSION_CLASSES'
需要一个元组
只需在列表中添加可迭代的权限即可。
permission_classes = [已验证]