【问题标题】:Using django custom permission on view defs在视图 defs 上使用 django 自定义权限
【发布时间】:2016-10-20 01:14:32
【问题描述】:

我写了一个自定义权限

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,)
        ......

    .......

但是权限在视图上不起作用,并且权限似乎没有被调用。我想知道如何在视图定义上实现自定义权限,不胜感激。

注意:此视图中还有其他定义,我不想对其施加权限。所以,我不能把权限放在视图级别。 这不是一盘棋。

【问题讨论】:

  • 也许是method_decorator? Docs
  • 是的,有一个method_decorator:@permission_classes((IsAuthenticated, ))。但它可能仅适用于基于函数的视图。

标签: python django permissions django-rest-framework


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2021-07-12
    • 1970-01-01
    • 1970-01-01
    • 2014-07-06
    • 2013-09-28
    • 1970-01-01
    • 2020-01-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多