2013-06-19 67 views
5

我正在爲文檔應用程序創建基於api的類,但是我想向APIView中的帖子和修補程序定義添加特定權限。例如,如何在特定請求中爲Django Rest Framework添加權限

class DocumentList(APIView): 

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

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

回答

2

By default permissions are unrestricted。在您的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容許圖can be found in the source

  • GET,OPTIONS和HEAD不需要許可,但由於我們指定IsAuthenticated我們仍然要求
  • POST地圖添加
  • PUT和PATCH地圖改變
  • DELETE映射到刪除
0

這就是我所做的。從documentation

創建權限類參考該項目

項目/ 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 
相關問題