diff --git a/dbm-ui/backend/db_services/quick_search/serializers.py b/dbm-ui/backend/db_services/quick_search/serializers.py index c1c4b73954..627747f791 100644 --- a/dbm-ui/backend/db_services/quick_search/serializers.py +++ b/dbm-ui/backend/db_services/quick_search/serializers.py @@ -29,5 +29,12 @@ class QuickSearchSerializer(serializers.Serializer): allow_empty=True, ) filter_type = serializers.ChoiceField(help_text=_("检索类型"), choices=FilterType.get_choices(), required=False) - keyword = serializers.CharField(help_text=_("关键字过滤"), required=True) - limit = serializers.IntegerField(help_text=_("分页大小"), required=False, default=10, min_value=1, max_value=1000) + keyword = serializers.CharField(help_text=_("关键字过滤"), required=False) + short_code = serializers.CharField(help_text=_("短码"), required=False) + limit = serializers.IntegerField(help_text=_("分页大小"), required=False, default=10) + + def validate(self, attrs): + # keyword 和 short_code 不能同时为空 + if not attrs.get("keyword") and not attrs.get("short_code"): + raise serializers.ValidationError(_("keyword 和 short_code 不能同时为空")) + return attrs diff --git a/dbm-ui/backend/db_services/quick_search/views.py b/dbm-ui/backend/db_services/quick_search/views.py index 20c2fadfd9..33f68dbeae 100644 --- a/dbm-ui/backend/db_services/quick_search/views.py +++ b/dbm-ui/backend/db_services/quick_search/views.py @@ -9,7 +9,9 @@ specific language governing permissions and limitations under the License. """ import logging +from hashlib import md5 +from django.core.cache import cache from django.utils.translation import ugettext_lazy as _ from rest_framework.decorators import action from rest_framework.response import Response @@ -35,6 +37,15 @@ class QuickSearchViewSet(viewsets.SystemViewSet): @action(methods=["POST"], detail=False, serializer_class=QuickSearchSerializer) def search(self, request, *args, **kwargs): params = self.params_validate(self.get_serializer_class()) - keyword = params.pop("keyword") + keyword = params.pop("keyword", "") + short_code = params.pop("short_code", "") + # 优先使用短码 + if short_code: + keyword = cache.get(f"shot_code_{short_code}") + else: + short_code = md5(keyword.encode("utf-8")).hexdigest() + cache.set(f"shot_code_{short_code}", keyword, 60 * 60 * 24) + result = QSearchHandler(**params).search(keyword) + result.update({"short_code": short_code, "keyword": keyword}) return Response(result)