如何在Django Rest Framework中为特定请求添加权限

use*_*508 5 django permissions django-rest-framework

我正在为文档应用程序创建基于类的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
Run Code Online (Sandbox Code Playgroud)

Sco*_*all 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
    ...
Run Code Online (Sandbox Code Playgroud)

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

  • GET、OPTIONS 和 HEAD 不需要权限,但既然我们指定了,IsAuthenticated我们仍然需要权限
  • POST 要添加的地图
  • PUT 和 PATCH 映射要更改
  • DELETE 要删除的地图