| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181 |
- """
- URL configuration for maxkb project.
- The `urlpatterns` list routes URLs to views. For more information please see:
- https://docs.djangoproject.com/en/4.2/topics/http/urls/
- Examples:
- Function views
- 1. Add an import: from my_app import views
- 2. Add a URL to urlpatterns: path('', views.home, name='home')
- Class-based views
- 1. Add an import: from other_app.views import Home
- 2. Add a URL to urlpatterns: path('', Home.as_view(), name='home')
- Including another URLconf
- 1. Import the include() function: from django.urls import include, path
- 2. Add a URL to urlpatterns: path('blog/', include('blog.urls'))
- """
- import os
- from pathlib import Path
- from django.http import HttpResponse, HttpResponseRedirect
- from django.urls import path, re_path, include
- from django.views import static
- from rest_framework import status
- from chat.urls import urlpatterns as chat_urlpatterns
- from common.init.init_doc import init_doc
- from common.result import Result
- from maxkb import settings
- from maxkb.conf import PROJECT_DIR
- from maxkb.const import CONFIG
- from models_provider.views.openai_gateway_view import OpenAIGatewayView
- admin_api_prefix = CONFIG.get_admin_path()[1:] + '/api/'
- admin_ui_prefix = CONFIG.get_admin_path()
- chat_api_prefix = CONFIG.get_chat_path()[1:] + '/api/'
- chat_ui_prefix = CONFIG.get_chat_path()
- builder_api_prefix = CONFIG.get_builder_path()[1:] + '/api/'
- builder_ui_prefix = CONFIG.get_builder_path()
- urlpatterns = [
- path(admin_api_prefix, include("users.urls")),
- path(admin_api_prefix, include("system_manage.urls")),
- path(admin_api_prefix, include("oss.urls")),
- path(admin_api_prefix, include("models_provider.urls")),
- path(admin_api_prefix, include("folders.urls")),
- path(admin_api_prefix, include("application.urls")),
- path(admin_api_prefix, include("knowledge.urls")),
- path(admin_api_prefix, include("tools.urls")),
- path(admin_api_prefix, include("sso.urls")),
- path(admin_api_prefix, include("plugin.urls")),
- path(builder_api_prefix, include("tools.urls")),
- path(builder_api_prefix, include("models_provider.urls")),
- path(builder_api_prefix, include("folders.urls")),
- path(builder_api_prefix, include("knowledge.urls")),
- path(builder_api_prefix, include("application.urls")),
- path(builder_api_prefix, include("trigger.urls")),
- path(builder_api_prefix, include("oss.urls")),
- path(chat_api_prefix, include("oss.urls")),
- path(chat_api_prefix, include("chat.urls")),
- path(f'{admin_ui_prefix[1:]}/', include('oss.retrieval_urls')),
- path(f'{builder_ui_prefix[1:]}/', include('oss.retrieval_urls')),
- path(f'{chat_ui_prefix[1:]}/', include('oss.retrieval_urls')),
- # OpenAI 兼容网关(根路径,外部客户端调用)
- path('api/v1/chat/completions', OpenAIGatewayView.as_view()),
- path('api/v1/models', OpenAIGatewayView.as_view()),
- ]
- init_doc(urlpatterns, chat_urlpatterns)
- def pro():
- urlpatterns.append(
- re_path(rf'^{CONFIG.get_admin_path()[1:]}/api-doc/(?P<path>.*)$', static.serve,
- {'document_root': os.path.join(settings.STATIC_ROOT, "drf_spectacular_sidecar")}, name='doc'),
- )
- urlpatterns.append(
- re_path(rf'^{CONFIG.get_chat_path()[1:]}/api-doc/(?P<path>.*)$', static.serve,
- {'document_root': os.path.join(settings.STATIC_ROOT, "drf_spectacular_sidecar")}, name='doc_chat'),
- )
- urlpatterns.append(
- re_path(rf'^{CONFIG.get_builder_path()[1:]}/api-doc/(?P<path>.*)$', static.serve,
- {'document_root': os.path.join(settings.STATIC_ROOT, "drf_spectacular_sidecar")}, name='doc_builder'),
- )
- # 暴露ui静态资源
- urlpatterns.append(
- re_path(rf"^{CONFIG.get_admin_path()[1:]}/(?P<path>.*)$", static.serve,
- {'document_root': os.path.join(settings.STATIC_ROOT, "admin")},
- name='admin'),
- )
- # 暴露ui静态资源
- urlpatterns.append(
- re_path(rf'^{CONFIG.get_chat_path()[1:]}/(?P<path>.*)$', static.serve,
- {'document_root': os.path.join(settings.STATIC_ROOT, "chat")},
- name='chat'),
- )
- # 暴露builder静态资源
- urlpatterns.append(
- re_path(rf'^{CONFIG.get_builder_path()[1:]}/(?P<path>.*)$', static.serve,
- {'document_root': os.path.join(settings.STATIC_ROOT, "builder")},
- name='builder'),
- )
- if not settings.DEBUG:
- pro()
- def get_index_html(index_path):
- file = open(index_path, "r", encoding='utf-8')
- content = file.read()
- file.close()
- return content
- def get_all_files(directory):
- base_path = Path(directory)
- file_paths = [
- '/' + str(file.relative_to(base_path)).replace('\\', '/')
- for file in base_path.rglob('*')
- if file.is_file()
- ]
- return sorted(file_paths, key=len, reverse=True)
- static_dict = {
- chat_ui_prefix: get_all_files(os.path.join(PROJECT_DIR, 'apps', "static", 'chat')),
- admin_ui_prefix: get_all_files(os.path.join(PROJECT_DIR, 'apps', "static", 'admin')),
- builder_ui_prefix: get_all_files(os.path.join(PROJECT_DIR, 'apps', "static", 'builder')),
- }
- def page_not_found(request, exception):
- """
- 页面不存在处理
- """
- if request.path.startswith(admin_ui_prefix + '/api/'):
- return Result(response_status=status.HTTP_404_NOT_FOUND, code=404, message="HTTP_404_NOT_FOUND")
- if request.path.startswith(chat_ui_prefix + '/api/'):
- return Result(response_status=status.HTTP_404_NOT_FOUND, code=404, message="HTTP_404_NOT_FOUND")
- if request.path.startswith(builder_ui_prefix + '/api/'):
- return Result(response_status=status.HTTP_404_NOT_FOUND, code=404, message="HTTP_404_NOT_FOUND")
- if request.path.startswith(chat_ui_prefix):
- in_ = [url for url in static_dict.get(chat_ui_prefix) if request.path.endswith(url)]
- if len(in_) > 0:
- a = chat_ui_prefix + in_[0]
- return HttpResponseRedirect(a)
- index_path = os.path.join(PROJECT_DIR, 'apps', "static", 'chat', 'index.html')
- content = get_index_html(index_path)
- content = content.replace("prefix: '/chat'", f"prefix: '{CONFIG.get_chat_path()}'")
- if not os.path.exists(index_path):
- return HttpResponse("页面不存在", status=404)
- return HttpResponse(content, status=200)
- elif request.path.startswith(builder_ui_prefix):
- in_ = [url for url in static_dict.get(builder_ui_prefix) if request.path.endswith(url)]
- if len(in_) > 0:
- a = builder_ui_prefix + in_[0]
- return HttpResponseRedirect(a)
- index_path = os.path.join(PROJECT_DIR, 'apps', "static", 'builder', 'index.html')
- content = get_index_html(index_path)
- content = content.replace("prefix: '/builder'", f"prefix: '{CONFIG.get_builder_path()}'")
- if not os.path.exists(index_path):
- return HttpResponse("页面不存在", status=404)
- return HttpResponse(content, status=200)
- elif request.path.startswith(admin_ui_prefix):
- in_ = [url for url in static_dict.get(admin_ui_prefix) if request.path.endswith(url)]
- if len(in_) > 0:
- a = admin_ui_prefix + in_[0]
- return HttpResponseRedirect(a)
- index_path = os.path.join(PROJECT_DIR, 'apps', "static", 'admin', 'index.html')
- if not os.path.exists(index_path):
- return HttpResponse("页面不存在", status=404)
- content = get_index_html(index_path)
- content = content.replace("prefix: '/admin'", f"prefix: '{CONFIG.get_admin_path()}'").replace(
- "builderPrefix: '/builder'", f"builderPrefix: '{CONFIG.get_builder_path()}'").replace(
- "chatPrefix: '/chat'", f"chatPrefix: '{CONFIG.get_chat_path()}'")
- return HttpResponse(content, status=200)
- else:
- return HttpResponseRedirect(admin_ui_prefix + '/')
- handler404 = page_not_found
|