feat: 接口增加默认缓存时间
This commit is contained in:
parent
3d9f04a443
commit
5131daa5cd
|
@ -609,7 +609,7 @@ class FileViewSet(CustomCreateModelMixin, RetrieveModelMixin, ListModelMixin, Cu
|
|||
serializer_class = FileSerializer
|
||||
filterset_fields = ['type']
|
||||
search_fields = ['name']
|
||||
post_idempotent = False
|
||||
cache_seconds = 0
|
||||
|
||||
def perform_create(self, serializer):
|
||||
file_obj = self.request.data.get('file')
|
||||
|
|
|
@ -40,21 +40,33 @@ class CustomGenericViewSet(MyLoggingMixin, GenericViewSet):
|
|||
permission_classes = [IsAuthenticated & RbacPermission]
|
||||
data_filter = False # 数据权限过滤是否开启(需要RbacPermission)
|
||||
data_filter_field = 'belong_dept'
|
||||
post_idempotent = True
|
||||
post_idempotent_seconds = 3
|
||||
hash_k = None
|
||||
cache_seconds = 5 # 接口缓存时间默认5秒
|
||||
|
||||
def finalize_response(self, request, response, *args, **kwargs):
|
||||
if self.hash_k and self.cache_seconds:
|
||||
cache.set(self.hash_k, response.data, timeout=self.cache_seconds) # 将结果存入缓存,设置超时时间
|
||||
return super().finalize_response(request, response, *args, **kwargs)
|
||||
|
||||
def initial(self, request, *args, **kwargs):
|
||||
super().initial(request, *args, **kwargs)
|
||||
if self.post_idempotent and request.method == 'POST': # 如果是post需进行幂等操作
|
||||
rdata = request.data
|
||||
rdata['request_userid'] = request.user.id
|
||||
cache_seconds = getattr(self, f"{self.action}_cache_seconds", getattr(self, 'cache_seconds', 0))
|
||||
if cache_seconds:
|
||||
self.cache_seconds = cache_seconds
|
||||
rdata = {}
|
||||
rdata['request_method'] = request.method
|
||||
rdata['request_path'] = request.path
|
||||
hash_k = hash(json.dumps(rdata))
|
||||
hash_v_e = cache.get(hash_k, None)
|
||||
rdata['request_data'] = request.data
|
||||
rdata['request_query'] = request.query_params.dict()
|
||||
rdata['request_userid'] = request.user.id
|
||||
self.hash_k = hash(json.dumps(rdata))
|
||||
hash_v_e = cache.get(self.hash_k, None)
|
||||
if hash_v_e is None:
|
||||
cache.set(hash_k, 'o', self.post_idempotent_seconds)
|
||||
cache.set(self.hash_k, 'o', self.cache_seconds)
|
||||
elif hash_v_e == 'o': # 说明请求正在处理
|
||||
raise ParseError(f'请求忽略,请{self.post_idempotent_seconds}秒后重试')
|
||||
raise ParseError(f'请求忽略,请{self.cache_seconds}秒后重试')
|
||||
elif hash_v_e:
|
||||
return Response(hash_v_e)
|
||||
|
||||
def get_serializer_class(self):
|
||||
action_serializer_name = f"{self.action}_serializer_class"
|
||||
|
|
Loading…
Reference in New Issue