5

我正在为文档应用程序创建一个基于类的 api,但我想在我的 APIView 中为帖子和补丁定义添加特定权限。例如,

class DocumentList(APIView):

    def get(self,request,format=None):
         ... blah

    def post(self,request,format=None):
        only allow administrators to create new documents 
        ... blah
4

2 回答 2

4

默认情况下,权限是不受限制的。在您的settings.py中,您可以指定一组不同的默认值来验证用户必须经过身份验证并拥有正确的 Django 模型权限。您需要model在视图类上指定一个属性DjangoModelPermissions才能生效。

# settings.py
REST_FRAMEWORK = {
    'DEFAULT_PERMISSION_CLASSES': (
        'rest_framework.permissions.IsAuthenticated',
        'rest_framework.permissions.DjangoModelPermissions'
    )
}

# views.py
class DocumentList(APIView):
    model = Document
    ...

DjangoModelPermissions权限映射可以在源代码中找到。

  • GET、OPTIONS 和 HEAD 不需要权限,但既然我们指定了IsAuthenticated,我们仍然需要
  • POST 地图添加
  • PUT 和 PATCH 映射更改
  • DELETE 要删除的地图
于 2013-06-20T00:11:32.163 回答
1

这就是我所做的。来自文档的参考

为项目创建权限类

项目/permissions.py

from rest_framework import permissions

class IsAuthenticatedOrReadOnly(permissions.BasePermission):

    def has_object_permission(self, request, view, obj):
        # Read permission - always allow for GET request
        if request.method in permissions.SAFE_METHODS:
            return True

        # Write permissions - only if authenticated
        return request.user and request.user.is_authenticated()

现在在视图中使用这个 PermissionClass

@permission_classes((IsAuthenticatedOrReadOnly, ))
class ShopViewSet(viewsets.ModelViewSet):
     queryset = Shop.objects.all()
     serializer_class = ShopSerializer
于 2017-01-01T09:46:43.803 回答