2013-06-19 2 views
5

मैं एक प्रलेखन ऐप के लिए कक्षा आधारित एपीआई बना रहा हूं, लेकिन मैं अपने 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 मॉडल अनुमति है। प्रभावी होने के लिए आपको DjangoModelPermissions के लिए अपनी व्यू क्लास पर model विशेषता निर्दिष्ट करने की आवश्यकता होगी।

# 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

  • मिलता है, विकल्प और सिर एक अनुमति की आवश्यकता नहीं है लेकिन जब से हम IsAuthenticated निर्दिष्ट हम अभी भी है कि
  • पोस्ट नक्शे
  • रख दिया और PATCH मानचित्र जोड़ने के लिए बदलने के लिए
  • को नक्शे हटा आवश्यकता होती रहे
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