2013-06-19 5 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モデル権限を持つことができます。 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

  • GET、OPTIONSとHEADは、許可を必要としませんが、我々はIsAuthenticatedを指定したので、我々はまだ
  • POSTマップがへ
  • DELETEマップを変更する
  • PUTとPATCHマップを追加することを要求しています削除
0

これは私がやったことです。プロジェクトのdocumentation

作成された許可クラスから参照

プロジェクト

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を使用/ permissions.py

@permission_classes((IsAuthenticatedOrReadOnly,)) 
class ShopViewSet(viewsets.ModelViewSet): 
    queryset = Shop.objects.all() 
    serializer_class = ShopSerializer 
関連する問題