From cd0e469af3b528f11939c02ab106988f315dc1b2 Mon Sep 17 00:00:00 2001 From: caoqianming Date: Wed, 28 Jan 2026 12:53:56 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20base=20=E5=AE=8C=E5=96=84=E8=8E=B7?= =?UTF-8?q?=E5=8F=96=E4=BF=AE=E6=94=B9=E5=8D=95=E4=B8=AA=E7=BC=93=E5=AD=98?= =?UTF-8?q?=E7=9A=84=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/ops/serializers.py | 4 ++++ apps/ops/views.py | 19 +++++++++++++------ 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/apps/ops/serializers.py b/apps/ops/serializers.py index cc9bf9f..cd7712a 100644 --- a/apps/ops/serializers.py +++ b/apps/ops/serializers.py @@ -29,3 +29,7 @@ class TextListSerializer(serializers.Serializer): name = serializers.CharField() filepath = serializers.CharField() size = serializers.CharField(label="MB") + +class CacheUpdateSerializer(serializers.Serializer): + value = serializers.JSONField() + timeout = serializers.IntegerField() diff --git a/apps/ops/views.py b/apps/ops/views.py index 093672e..20d4aa1 100644 --- a/apps/ops/views.py +++ b/apps/ops/views.py @@ -5,7 +5,7 @@ from rest_framework.views import APIView from rest_framework.permissions import IsAuthenticated from django.conf import settings import os -from apps.ops.serializers import DbbackupDeleteSerializer, MemDiskSerializer, CpuSerializer, DrfRequestLogSerializer, TlogSerializer, TextListSerializer +from apps.ops.serializers import DbbackupDeleteSerializer, MemDiskSerializer, CpuSerializer, DrfRequestLogSerializer, TlogSerializer, TextListSerializer, CacheUpdateSerializer from rest_framework.exceptions import NotFound from rest_framework.mixins import ListModelMixin from apps.ops.filters import DrfLogFilterSet, TlogFilterSet @@ -20,6 +20,7 @@ from drf_yasg.utils import swagger_auto_schema from apps.ops.service import ServerService, CeleryMonitor, RedisMonitor from server.settings import BACKUP_PATH from django.core.cache import cache +from rest_framework.serializers import Serializer # Create your views here. @@ -233,14 +234,20 @@ class DbBackupView(APIView): class CacheView(APIView): permission_classes = [IsAdminUser] - @swagger_auto_schema(operation_summary="获取value", responses={204: None}) + @swagger_auto_schema(operation_summary="获取value", responses={200: Serializer}) def get(self, request, key): - return Response({"value": cache.get(key, None)}) + try: + value = cache.get(key) + except Exception as e: + raise NotFound(str(e)) + return Response({"value": value}) - @swagger_auto_schema(operation_summary="修改value", responses={204: None}) + @swagger_auto_schema(operation_summary="修改value", responses={200: None}, request_body=CacheUpdateSerializer) def post(self, request, key): - if "value" in request.data and request.data["value"] is not None: - cache.set(key, request.data.get("value")) + sr = CacheUpdateSerializer(data=request.data) + sr.is_valid(raise_exception=True) + vdata = sr.validated_data + cache.set(key, vdata['value'], timeout=vdata["timeout"]) return Response() class DrfRequestLogViewSet(ListModelMixin, CustomGenericViewSet):