我正在尝试熟悉djangorestframework的权限设置。作为其中的一部分,我正在尝试建立一个概念验证,以基于函数的响应拒绝所有访问(包括读取访问)并确保它被拒绝。 (基本上确保在我认为它应该被使用时使用该函数。)我有RetrieveAPIView
和ListAPIView
设置相同。 Retrieve
拒绝访问,但List
允许访问,我正在试图找出存在差异的原因。
# in views.py
class TableList(generics.ListAPIView):
queryset = MyModel.objects.all()
serializer_class = MySerializer
permission_classes = (RejectAll,)
class TableDetail(generics.RetrieveAPIView):
queryset = MyModel.objects.all()
serializer_class = MySerializer
permission_classes = (RejectAll,)
# in permissions.py
class RejectAll(permissions.BasePermission):
def has_object_permission(self, request, view, obj):
return False # for proof of concept -- this should always block all access?
# in settings.py
...
REST_FRAMEWORK = {
'DEFAULT_PERMISSION_CLASSES': (
'rest_framework.permissions.IsAuthenticated',
)
}
# in serializers.py
class MySerializer(serializers.ModelSerializer):
class Meta:
model = SolarData
fields = (...)
我知道我可以创建一个调用get_object()
的{{1}}方法,但这不会破坏设置self.check_object_permissions(self.request, obj)
的目的吗?通用视图不应该自己执行相同的检查吗?
编辑/澄清:通过读访问我当然意味着GET方法。
答案 0 :(得分:1)
发布后立即找到答案。显然,还有has_permission()
函数与我使用的has_object_permission()
分开。所以permissions.py
变为:
# permissions.py
class RejectAll(permissions.BasePermission):
def has_permission(self, request, view):
return False
现在按预期工作。