Django Rest Framework使用`permissions.IsAuthenticated`上升了一个错误

时间:2018-05-22 23:16:39

标签: python django django-rest-framework

我有一个ModelViewSet,我希望只有经过身份验证的用户才能访问它,所以我添加了permission_classes = (permissions.IsAuthenticated),但是收到错误:

TypeError at /es/general/countries/
'type' object is not iterable

这是ViewSet

class CountryViewSet(viewsets.ModelViewSet):
    permission_classes = (permissions.IsAuthenticated)
    queryset = models.Country.objects.all()
    serializer_class = serializers.CountrySerializer

如果我删除IsAuthenticated分配行,ViewSet可以正常工作,但是有了它,我就会收到错误。

我将非常感谢你的帮助。

1 个答案:

答案 0 :(得分:1)

你缺少一个小逗号:

permission_classes = (IsAuthenticated,)
# This works
for a in permission_classes:
    print("fine")

permission_classes_error = (IsAuthenticated)
#TypeError: 'type' object is not iterable
for b in permission_classes_error:
    print("fine")

使用逗号,我们创建一个只有一个元素的新元组(可迭代类型)。如果没有它,我们会将IsAuthenticated(类型为object,因此无法迭代)分配给permission_classes

您的固定ViewSet如下所示:

class CountryViewSet(viewsets.ModelViewSet):
    permission_classes = (permissions.IsAuthenticated,)
    queryset = models.Country.objects.all()
    serializer_class = serializers.CountrySerializer