From 7c080d9198020195e0c814a238d20a64e4617847 Mon Sep 17 00:00:00 2001 From: caoqianming Date: Wed, 5 Jun 2024 09:27:33 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20base=20=E5=9C=A8=E7=AC=AC=E4=B8=80?= =?UTF-8?q?=E6=AC=A1=E5=AE=9E=E4=BE=8B=E5=8C=96=E6=97=B6=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E6=9D=83=E9=99=90=E6=A0=87=E8=AF=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/utils/viewsets.py | 27 ++++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/apps/utils/viewsets.py b/apps/utils/viewsets.py index e7e7c440..5b03a80c 100755 --- a/apps/utils/viewsets.py +++ b/apps/utils/viewsets.py @@ -21,7 +21,7 @@ class CustomGenericViewSet(MyLoggingMixin, GenericViewSet): """ 增强的GenericViewSet """ - perms_map = {} # 权限标识 + perms_map = None # 权限标识 throttle_classes = [UserRateThrottle] logging_methods = ['POST', 'PUT', 'PATCH', 'DELETE'] ordering_fields = '__all__' @@ -40,6 +40,19 @@ class CustomGenericViewSet(MyLoggingMixin, GenericViewSet): cache_seconds = 5 # 接口缓存时间默认5秒 filterset_fields = select_related_fields + def __new__(cls, *args, **kwargs): + """ + 第一次实例化时,将权限标识添加到全局权限标识列表中 + """ + if cls.perms_map is None: + basename = kwargs["basename"] + cls.perms_map = {'get': '*', 'post': '{}.create'.format(basename), 'put': '{}.update'.format( + basename), 'patch': '{}.update'.format(basename), 'delete': '{}.delete'.format(basename)} + for _, v in cls.perms_map.items(): + if v not in ALL_PERMS and v != '*': + ALL_PERMS.append(v) + return super().__new__(cls) + def finalize_response(self, request, response, *args, **kwargs): if self.hash_k and self.cache_seconds: cache.set(self.hash_k, response.data, @@ -182,23 +195,11 @@ class CustomGenericViewSet(MyLoggingMixin, GenericViewSet): return queryset return queryset.filter(create_by=self.request.user) - class CustomModelViewSet(BulkCreateModelMixin, BulkUpdateModelMixin, CustomListModelMixin, RetrieveModelMixin, BulkDestroyModelMixin, CustomGenericViewSet): """ 增强的ModelViewSet """ - - def __init__(self, **kwargs) -> None: - super().__init__(**kwargs) - # 增加默认权限标识 - if not self.perms_map or self.perms_map == {'get': '*'}: - basename = self.basename - self.perms_map = {'get': '*', 'post': '{}.create'.format(basename), 'put': '{}.update'.format( - basename), 'patch': '{}.update'.format(basename), 'delete': '{}.delete'.format(basename)} - for k, v in self.perms_map.items(): - if v not in ALL_PERMS and v != '*': - ALL_PERMS.append(v) @swagger_auto_schema(request_body=ComplexSerializer, responses={200: {}}) @action(methods=['post'], detail=False, perms_map={'post': '*'})