"""backend URL Configuration The `urlpatterns` list routes URLs to views. For more information please see: https://docs.djangoproject.com/en/3.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')) """ from django.conf.urls.static import static from django.urls import path, include, re_path from drf_yasg import openapi from drf_yasg.views import get_schema_view from rest_framework import permissions from rest_framework_simplejwt.views import ( TokenRefreshView, ) from application import dispatch from application import settings from application.sse_views import sse_view from dvadmin.system.views.dictionary import InitDictionaryViewSet from dvadmin.system.views.login import ( LoginView, CaptchaView, ApiLogin, LogoutView, LoginTokenView ) from dvadmin.system.views.system_config import InitSettingsViewSet from dvadmin.utils.swagger import CustomOpenAPISchemaGenerator # =========== 初始化系统配置 ================= dispatch.init_system_config() dispatch.init_dictionary() # =========== 初始化系统配置 ================= permission_classes = [permissions.AllowAny, ] if settings.DEBUG else [permissions.IsAuthenticated, ] schema_view = get_schema_view( openapi.Info( title="Snippets API", default_version="v1", description="Test description", terms_of_service="https://www.google.com/policies/terms/", contact=openapi.Contact(email="contact@snippets.local"), license=openapi.License(name="BSD License"), ), public=True, permission_classes=permission_classes, generator_class=CustomOpenAPISchemaGenerator, ) # 前端页面映射 from django.http import Http404, HttpResponse from django.shortcuts import render import mimetypes import os def web_view(request): return render(request, 'web/index.html') def serve_web_files(request, filename): # 设定文件路径 filepath = os.path.join(settings.BASE_DIR, 'templates', 'web', filename) # 检查文件是否存在 if not os.path.exists(filepath): raise Http404("File does not exist") # 根据文件扩展名,确定 MIME 类型 mime_type, _ = mimetypes.guess_type(filepath) # 打开文件并读取内容 with open(filepath, 'rb') as f: response = HttpResponse(f.read(), content_type=mime_type) return response urlpatterns = ( [ re_path( r"^swagger(?P\.json|\.yaml)$", schema_view.without_ui(cache_timeout=0), name="schema-json", ), path( "", schema_view.with_ui("swagger", cache_timeout=0), name="schema-swagger-ui", ), path( r"redoc/", schema_view.with_ui("redoc", cache_timeout=0), name="schema-redoc", ), path("api/system/", include("dvadmin.system.urls")), path("api/login/", LoginView.as_view(), name="token_obtain_pair"), path("api/logout/", LogoutView.as_view(), name="token_obtain_pair"), path("token/refresh/", TokenRefreshView.as_view(), name="token_refresh"), re_path( r"^api-auth/", include("rest_framework.urls", namespace="rest_framework") ), path("api/captcha/", CaptchaView.as_view()), path("api/init/dictionary/", InitDictionaryViewSet.as_view()), path("api/init/settings/", InitSettingsViewSet.as_view()), path("apiLogin/", ApiLogin.as_view()), # 仅用于开发,上线需关闭 path("api/token/", LoginTokenView.as_view()), # 前端页面映射 path('web/', web_view, name='web_view'), path('web/', serve_web_files, name='serve_web_files'), # sse path('sse/', sse_view, name='sse'), ] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) + static(settings.STATIC_URL, document_root=settings.STATICFILES_DIRS[0] if settings.STATICFILES_DIRS else None) + [re_path(ele.get('re_path'), include(ele.get('include'))) for ele in settings.PLUGINS_URL_PATTERNS] ) #就是添加如下内容,把自己的路由单独写出来,这样方便与dvadmin3的官方路由作区分 My_Urls = ( [ #这里的crud_book是指django创建的应用名称crud_book path('',include('crud_book.urls')),] ) # 这里把自己的路径单独出来,后面再追加在一起 urlpatterns += My_Urls