首页 > 解决方案 > django 如何从视图中获取装饰器中的 kwargs

问题描述

这是我的看法

class SectorCreateView(GenericAPIView):
permission_classes = [IsAuthenticated]
serializer_class = SectorSerializer
@method_decorator(permission_required('view_sector'))
def get(self, request, *args, **kwargs):
    print('kwargs in view',kwargs)
    sector = Sector.objects.all()
    serializer = self.serializer_class(sector, many=True)
    return Response(serializer.data, status=status.HTTP_200_OK)

我正在使用需要权限的装饰器来检查用户的权限。在 **kwargs 中有带有公司名称的 slug。在此基础上,我正在检查该特定公司的权限。我可以在我的视图中看到 kwargs,但在我的装饰器中看不到

这是我的装饰器的代码

def permission_required(perm, login_url=None, raise_exception=False):
    def check_perms(user, **kwargs):
       print('kwargs in decorator',kwargs)
       partof_objs = PartOf.objects.filter(user=user)
       for i in partof_objs:
           role = Role.objects.filter(pk = i.role.pk)
           for permission in role:
               li = permission.permissions.values_list('code', flat=True)
               has_perm = perm in li
               if has_perm:
                   print('Granted')
                   return True
               else:
                   print('Denied')
                   raise PermissionDenied
            
       return False
   return user_passes_test(check_perms, login_url=login_url)
        

标签: pythondjangodjango-rest-frameworkdjango-viewspython-decorators

解决方案


推荐阅读