在视图defs上使用django自定义权限

时间:2016-06-18 07:25:49

标签: python django permissions django-rest-framework

我已经写了自定义权限

class IsObjectOwner(permissions.BasePermission):

    def has_permission(self, request, view):
        if ...
            .....
            return False
        else:
            return True

我正在尝试将其应用于一些特定的视图定义。

URLs.py

       url(r'^get_possible_moves/', include('GameView.get_possible_moves')),
       url(r'^get_available_pieces/', include('GameView.get_available_pieces')),
       url(r'^remove_pieces/', include('GameView.remove_pie

ces')),

views.py

class GameView(viewsets.ModelViewSet):
    queryset = GameModel.objects.all()
    serializer_class = GameSerializer

    def get_available_pieces(self,request,*args,**kwargs):
        permission_classes(IsObjectOwner,)
        ....
    def get_possible_moves(self,request,*args,**kwargs):
        permission_classes(IsObjectOwner,)
        .....
    def remove_pieces(self,request,*args,**kwargs):
        permission_classes(IsObjectOwner,)
        ......

    .......

但该权限不适用于该视图,并且该权限似乎未被调用。我想知道如何在视图定义上实现自定义权限,感谢任何帮助。

注意:此视图中还有其他定义,我不想强​​加权限。所以,我无法将权限放在视图级别。 这不是一盘棋。

1 个答案:

答案 0 :(得分:0)

permissions_classes设置为整个视图集,而不仅仅是函数。

class GameView(viewsets.ModelViewSet):
    permission_classes = (IsObjectOwner,)
    queryset = GameModel.objects.all()
    serializer_class = GameSerializer

    def get_available_pieces(self,request,*args,**kwargs):
        ....
        return
    def get_possible_moves(self,request,*args,**kwargs):
        ....
        return
    def remove_pieces(self,request,*args,**kwargs):
        ....
        return