From 4b64903910105cbc6c18f365dc270ddfe6c58e6f Mon Sep 17 00:00:00 2001 From: caoqianming Date: Wed, 9 Oct 2024 13:47:11 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20base=20CustomGenericViewSet=20=E5=88=9D?= =?UTF-8?q?=E5=A7=8B=E5=8C=96=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/utils/viewsets.py | 26 ++++++++++---------------- 1 file changed, 10 insertions(+), 16 deletions(-) diff --git a/apps/utils/viewsets.py b/apps/utils/viewsets.py index db865a2c..0d816a0a 100755 --- a/apps/utils/viewsets.py +++ b/apps/utils/viewsets.py @@ -21,6 +21,7 @@ class CustomGenericViewSet(MyLoggingMixin, GenericViewSet): """ 增强的GenericViewSet """ + _initialized = False perms_map = None # 权限标识 throttle_classes = [UserRateThrottle] logging_methods = ['POST', 'PUT', 'PATCH', 'DELETE'] @@ -44,13 +45,15 @@ class CustomGenericViewSet(MyLoggingMixin, GenericViewSet): """ 第一次实例化时,将权限标识添加到全局权限标识列表中 """ - 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) + if not cls._initialized: + 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) + cls._initialized = True return super().__new__(cls) def finalize_response(self, request, response, *args, **kwargs): @@ -87,15 +90,6 @@ class CustomGenericViewSet(MyLoggingMixin, GenericViewSet): return action_serializer_class return super().get_serializer_class() - def __init__(self, *args, **kwargs): - super().__init__(*args, **kwargs) - if self.perms_map: - for k, v in self.perms_map.items(): - if v not in ALL_PERMS and v != '*': - ALL_PERMS.append(v) - if not hasattr(self, 'filterset_fields'): - self.filterset_fields = self.select_related_fields - def get_queryset_custom(self, queryset): """ 自定义过滤方法可复写