From 2da31997e5d36a1f28abe70a4be71f42b253c04f Mon Sep 17 00:00:00 2001 From: shaohuzhang1 <80892890+shaohuzhang1@users.noreply.github.com> Date: Fri, 24 May 2024 15:57:43 +0800 Subject: [PATCH] =?UTF-8?q?perf:=20=E4=BC=98=E5=8C=96API=5FKEY=E8=B0=83?= =?UTF-8?q?=E7=94=A8=E5=AF=B9=E8=AF=9D=E6=96=87=E6=A1=A3=20(#532)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/application/urls.py | 6 +- apps/common/init/init_doc.py | 88 +++++++++++++++++++++ apps/smartdoc/urls.py | 27 +------ ui/src/views/application-overview/index.vue | 6 +- 4 files changed, 98 insertions(+), 29 deletions(-) create mode 100644 apps/common/init/init_doc.py diff --git a/apps/application/urls.py b/apps/application/urls.py index 624b5b45b..7c3b4ea6c 100644 --- a/apps/application/urls.py +++ b/apps/application/urls.py @@ -5,7 +5,7 @@ from . import views app_name = "application" urlpatterns = [ path('application', views.Application.as_view(), name="application"), - path('application/profile', views.Application.Profile.as_view()), + path('application/profile', views.Application.Profile.as_view(), name='application/profile'), path('application/embed', views.Application.Embed.as_view()), path('application/authentication', views.Application.Authentication.as_view()), path('application//edit_icon', views.Application.EditIcon.as_view()), @@ -28,7 +28,7 @@ urlpatterns = [ path('application//access_token', views.Application.AccessToken.as_view(), name='application/access_token'), path('application//', views.Application.Page.as_view(), name='application_page'), - path('application//chat/open', views.ChatView.Open.as_view()), + path('application//chat/open', views.ChatView.Open.as_view(), name='application/open'), path("application/chat/open", views.ChatView.OpenTemp.as_view()), path("application//chat/client//", views.ChatView.ClientChatHistoryPage.as_view()), @@ -50,7 +50,7 @@ urlpatterns = [ name=''), path('application//chat//chat_record//improve', views.ChatView.ChatRecord.ChatRecordImprove.as_view()), - path('application/chat_message/', views.ChatView.Message.as_view()), + path('application/chat_message/', views.ChatView.Message.as_view(), name='application/message'), path( 'application//chat//chat_record//dataset//document_id//improve/', views.ChatView.ChatRecord.Improve.Operate.as_view(), diff --git a/apps/common/init/init_doc.py b/apps/common/init/init_doc.py new file mode 100644 index 000000000..60ef21bcf --- /dev/null +++ b/apps/common/init/init_doc.py @@ -0,0 +1,88 @@ +# coding=utf-8 +""" + @project: maxkb + @Author:虎 + @file: init_doc.py + @date:2024/5/24 14:11 + @desc: +""" +import hashlib + +from django.urls import re_path, path +from drf_yasg import openapi +from drf_yasg.views import get_schema_view +from rest_framework import permissions + +from common.auth import AnonymousAuthentication +from smartdoc.const import CONFIG + + +def init_app_doc(application_urlpatterns): + schema_view = get_schema_view( + openapi.Info( + title="Python API", + default_version='v1', + description="智能客服平台", + ), + public=True, + permission_classes=[permissions.AllowAny], + authentication_classes=[AnonymousAuthentication] + ) + application_urlpatterns += [ + re_path(r'^doc(?P\.json|\.yaml)$', schema_view.without_ui(cache_timeout=0), + name='schema-json'), # 导出 + path('doc/', schema_view.with_ui('swagger', cache_timeout=0), name='schema-swagger-ui'), + path('redoc/', schema_view.with_ui('redoc', cache_timeout=0), name='schema-redoc'), + ] + + +def init_chat_doc(application_urlpatterns, patterns): + chat_schema_view = get_schema_view( + openapi.Info( + title="Python API", + default_version='/chat', + description="智能客服平台", + ), + public=True, + permission_classes=[permissions.AllowAny], + authentication_classes=[AnonymousAuthentication], + patterns=[url for url in patterns if + url.name is not None and ['application/message', 'application/open', + 'application/profile'].__contains__( + url.name)] + ) + application_urlpatterns += [ + path('doc/chat/', chat_schema_view.with_ui('swagger', cache_timeout=0), name='schema-swagger-ui'), + path('redoc/chat/', chat_schema_view.with_ui('redoc', cache_timeout=0), name='schema-redoc'), + ] + + +def encrypt(text): + md5 = hashlib.md5() + md5.update(text.encode()) + result = md5.hexdigest() + return result + + +def get_call(application_urlpatterns, patterns, params, func): + def run(): + if params['valid'](): + func(*params['get_params'](application_urlpatterns, patterns)) + + return run + + +init_list = [(init_app_doc, {'valid': lambda: CONFIG.get('DOC_PASSWORD') is not None and encrypt( + CONFIG.get('DOC_PASSWORD')) == '34558ab2851c350e8ff578585135b8c9', + 'get_call': get_call, + 'get_params': lambda application_urlpatterns, patterns: (application_urlpatterns,)}), + (init_chat_doc, {'valid': lambda: CONFIG.get('DOC_PASSWORD') is not None and encrypt( + CONFIG.get('DOC_PASSWORD')) == '34558ab2851c350e8ff578585135b8c9' or True, 'get_call': get_call, + 'get_params': lambda application_urlpatterns, patterns: ( + application_urlpatterns, patterns)})] + + +def init_doc(application_urlpatterns, patterns): + for init, params in init_list: + if params['valid'](): + get_call(application_urlpatterns, patterns, params, init)() diff --git a/apps/smartdoc/urls.py b/apps/smartdoc/urls.py index 9e85a1874..e93613745 100644 --- a/apps/smartdoc/urls.py +++ b/apps/smartdoc/urls.py @@ -19,27 +19,14 @@ import os from django.http import HttpResponse from django.urls import path, re_path, include from django.views import static -from drf_yasg import openapi -from drf_yasg.views import get_schema_view -from rest_framework import permissions, status +from rest_framework import status -from common.auth import AnonymousAuthentication +from application.urls import urlpatterns as application_urlpatterns +from common.init.init_doc import init_doc from common.response.result import Result from smartdoc import settings from smartdoc.conf import PROJECT_DIR -schema_view = get_schema_view( - - openapi.Info( - title="Python API", - default_version='v1', - description="智能客服平台", - ), - public=True, - permission_classes=[permissions.AllowAny], - authentication_classes=[AnonymousAuthentication] -) - urlpatterns = [ path("api/", include("users.urls")), path("api/", include("dataset.urls")), @@ -83,10 +70,4 @@ def page_not_found(request, exception): handler404 = page_not_found - -urlpatterns += [ - re_path(r'^doc(?P\.json|\.yaml)$', schema_view.without_ui(cache_timeout=0), - name='schema-json'), # 导出 - path('doc/', schema_view.with_ui('swagger', cache_timeout=0), name='schema-swagger-ui'), - path('redoc/', schema_view.with_ui('redoc', cache_timeout=0), name='schema-redoc'), -] +init_doc(urlpatterns, application_urlpatterns) diff --git a/ui/src/views/application-overview/index.vue b/ui/src/views/application-overview/index.vue index bbda53a29..b8a522fc6 100644 --- a/ui/src/views/application-overview/index.vue +++ b/ui/src/views/application-overview/index.vue @@ -82,9 +82,9 @@ API访问凭据
- + {{ apiUrl }} - + @@ -149,7 +149,7 @@ const { params: { id } } = route as any -const apiUrl = window.location.origin + '/doc' +const apiUrl = window.location.origin + '/doc/chat' const EditAvatarDialogRef = ref() const LimitDialogRef = ref()