python - 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)
解决方案
推荐阅读
- c# - “无法获取类型库的文件路径”尝试在 .NET 中使用 OCX
- mongodb - MongoDB 提供哪些通信安全选项?
- spring-kafka - 如何扩展 spring-kafka 的“@KafkaListener”注释以创建我自己的具有有限属性的注释?
- angular - Angular 9 首次构建需要很长时间,对 CI 来说很不方便,有没有办法加快速度?
- python - Matplotlib:有没有办法用 matplotlibrc 设置默认的散布样式?
- java - 从数据库中检索的日期值使用 java.util.date 显示前一天的值
- jenkins - Jenkins 管道构建分支触发器
- javascript - 在句柄函数上反应钩子状态未定义
- business-objects - 在 WebI 报告中过滤高于 X% 组的行
- flutter - 如何在颤动中将自定义小部件传递给另一个自定义小部件?