如何在 FastAPI 中使用本地资源自定义 Swagger UI
要自定义 FastAPI 中的 Swagger UI,且使用本地资源来代替 CDN。只是需要稍微修改一下。
修改后的代码:
步骤:
- 挂载本地静态文件目录:我们将本地的 Swagger UI 资源文件(如
.js,.css,favicon.png等)放置在项目的一个目录中(例如:static/swagger-ui)。 - 自定义 Swagger UI 页面:您可以通过 FastAPI 的
get_swagger_ui_html()方法来加载本地的 Swagger UI 页面。
修改后的代码:
from fastapi import FastAPI
from fastapi.responses import HTMLResponse
from fastapi.staticfiles import StaticFiles
from fastapi.openapi.docs import get_swagger_ui_htmlapp = FastAPI(docs_url=None, # 禁用默认的 Swagger UI 地址redoc_url=None # 禁用 ReDoc 默认地址
)# Step 1: Mount the static directory for Swagger UI resources
app.mount("/static", StaticFiles(directory="static"), name="static")# Step 2: Define custom Swagger UI route
@app.get("/docs", include_in_schema=False)
async def custom_swagger_ui():return get_swagger_ui_html(openapi_url="/openapi.json", # 指定 OpenAPI 文档路径title="API Docs", # 自定义页面标题swagger_js_url="/static/swagger-ui/swagger-ui-bundle.js", # 本地 JS 文件swagger_css_url="/static/swagger-ui/swagger-ui.css", # 本地 CSS 文件swagger_favicon_url="/static/swagger-ui/favicon.png" # 本地 favicon 图标)
解释:
-
禁用默认的 Swagger UI:
docs_url=None, # 禁用默认的 Swagger UI 地址 redoc_url=None # 禁用 ReDoc 默认地址通过设置
docs_url=None和redoc_url=None,您禁用了 FastAPI 默认提供的 Swagger UI 和 ReDoc 文档路径。 -
挂载静态文件目录:
app.mount("/static", StaticFiles(directory="static"), name="static")这行代码将本地
static目录挂载为静态文件服务。Swagger UI 资源文件应该放在static/swagger-ui目录下。 -
自定义 Swagger UI 页面:
@app.get("/docs", include_in_schema=False) async def custom_swagger_ui():return get_swagger_ui_html(openapi_url="/openapi.json",title="API Docs",swagger_js_url="/static/swagger-ui/swagger-ui-bundle.js",swagger_css_url="/static/swagger-ui/swagger-ui.css",swagger_favicon_url="/static/swagger-ui/favicon.png")get_swagger_ui_html()是 FastAPI 提供的函数,用于生成 Swagger UI 的 HTML 页面。您可以在其中自定义:openapi_url:指定您的 OpenAPI 文档 URL。swagger_js_url、swagger_css_url、swagger_favicon_url:指定 Swagger UI 需要的本地资源文件路径。
本地文件结构:
您的文件夹结构应该如下:
project/
│
├── app.py # FastAPI 代码
├── static/
│ └── swagger-ui/
│ ├── swagger-ui.css
│ ├── swagger-ui-bundle.js
│ ├── swagger-ui-standalone-preset.js
│ └── favicon.png
访问 Swagger UI:
- 启动应用后,访问
http://127.0.0.1:8000/docs,您应该可以看到加载了本地资源的 Swagger UI 页面,而不再依赖外部 CDN。
这样,您就可以使用 FastAPI 提供的本地资源来定制 Swagger UI 了。
相关文章:
如何在 FastAPI 中使用本地资源自定义 Swagger UI
要自定义 FastAPI 中的 Swagger UI,且使用本地资源来代替 CDN。只是需要稍微修改一下。 修改后的代码: 步骤: 挂载本地静态文件目录:我们将本地的 Swagger UI 资源文件(如 .js, .css, favicon.png 等)放…...
wxWidgets生成HTML文件,带图片转base64数据
编译环境大家可以看我之前的文章,CodeBlocks + msys2 + wx3.2,win10 这里功能就是生成HTML文件,没用HTML库,因为是自己固定的格式,图片是一个vector,可以动态改变数量的。 效果如下: #include <wx/string.h> #include <wx/file.h> #include <wx/ima…...
基于ArcGIS的SWAT模型+CENTURY模型模拟流域生态系统水-碳-氮耦合过程研究
流域是一个相对独立的自然地理单元,它是以水系为纽带,将系统内各自然地理要素连结成一个不可分割的整体。碳和氮是陆地生态系统中最重要的两种化学元素,而在流域系统内,水-碳-氮是相互联动、不可分割的耦合体。随着流域内人类活动…...
一键掌握多平台短视频矩阵营销/源码部署
短视频矩阵系统的介绍与应用 随着数字化营销策略的不断演进,传统的短视频矩阵操作方法可能已显陈旧。为此,一款全新的短视频矩阵系统应运而生,它通过整合多个社交媒体账户、创建多样化的任务、运用先进的智能视频编辑工具、实现多平台内容的…...
2.Python基础知识:注释、变量以及数据类型、标识符和关键字、输入函数、输出函数、运算符、程序类型转换
1. 注释 注释是用来解释代码,增强代码可读性的部分。在 Python 中,注释分为单行注释和多行注释。 单行注释:以 # 开头,后面的内容都被视为注释。 # 这是一个单行注释 print("Hello, World!") # 输出 "Hello, Wor…...
3NF讲解
3NF讲解 3NF(第三范式)是数据库设计中的一种规范化方法,目的是消除数据冗余和避免数据异常。它帮助数据库保持高效,灵活和一致性。理解3NF的关键点在于它依赖于前两个范式(1NF和2NF)的基础。 1. 第一范式…...
Spring Boot框架下的单元测试
1. 什么是单元测试 1.1 基本定义 单元测试(Unit Test) 是对软件开发中最小可测单位(例如一个方法或者一个类)进行验证的一种测试方式。在 Java 后端的 Spring Boot 项目中,单元测试通常会借助 JUnit、Mockito 等框架对代码中核心逻辑进行快…...
AI测试工程师成长指南:以DeepSeek模型训练为例
目录 引言:AI测试工程师的使命与挑战成长日记:从测试小白到AI测试专家核心能力:AI测试工程师的必备素养知识体系:技术栈与技能图谱AI测试工具全景:以DeepSeek为核心的工具链实战训练模式:以DeepSeek模型迭…...
【数据结构】_队列的结构与实现
目录 1. 队列的概念和结构 2. 队列的应用 3. 队列的实现 3.1 队列实现的底层结构选择 3.2 结构体设计 3.2.1 仅为链表结点设计结构体 3.2.2 为链表再设计一个结构体 3.3 Queue.h 3.4 Queue.c 3.5 Test_Queue.c 注:部分方法实现细节 1. 队列的概念和结构 …...
机器学习--2.多元线性回归
多元线性回归 1、基本概念 1.1、连续值 1.2、离散值 1.3、简单线性回归 1.4、最优解 1.5、多元线性回归 2、正规方程 2.1、最小二乘法 2.2、多元一次方程举例 2.3、矩阵转置公式与求导公式 2.4、推导正规方程0的解 2.5、凸函数判定 成年人最大的自律就是:…...
MySQL时间类型相关总结(DATETIME, TIMESTAMP, DATE, TIME, YEAR)
MySQL时间类型相关总结(DATETIME, TIMESTAMP, DATE, TIME, YEAR) MySQL官方文档: https://dev.mysql.com/doc/refman/8.0/en/date-and-time-types.html 一. 对比: 在 MySQL 中,处理时间相关的数据类型主要有以下几种:DATE、TIME、…...
朴素贝叶斯原理
在所有的机器学习分类算法中,朴素贝叶斯和其他绝大多数的分类算法都不同。对于大多数的分类算法,比如决策树,KNN,逻辑回归,支持向量机等,他们都是判别方法,也就是直接学习出特征输出Y和特征X之间的关系,要么…...
k8s中,一.pod污点,二.pod容器污点容忍策略,三.pod优先级(PriorityClass类)
一.pod污点:污点是让节点与pod产生排斥的一类规则污点标签的命令1.查看污点标签kubectl describe nodes 节点名2.设置污点标签kubectl taint node 节点名 key值value值:污点标签种类3.删除污点标签kubectl taint node 节点名 key值value值:污点标签种类-4.污点标签种类驱逐:NoE…...
【重生之学习C语言----水仙花篇】
目录 编辑 ----------------------------------------begin-------------------------------------- 一、什么是水仙花数? 二、问题分析 确定数字的位数:计算输入数字的位数 n。 分离每一位数字:例如将 153 分离为 1、5、3。 计算各…...
两步构建 AI 总结助手,实现智能文档摘要
在信息极度丰富的当下,如何从海量且复杂的文件资料中筛选出关键内容,成为了不少企业和个人急需解决的问题。本次解决方案将向您介绍,如何通过函数计算 FC 阿里云百炼平台搭建智能 AI 总结助手,实现高效的文本自动总结和信息提取。…...
承压金字塔(蓝桥杯17C)
文件读取,与写入:C 文件和流 | 菜鸟教程 #include <iostream> #include <fstream> #include <string> using namespace std; double sum[30][30]; int main() {ifstream infile("C:\\Users\\xutianci\\OneDrive\\Desktop\\TMOCC\…...
day33-数据同步rsync
一、Rsync本地模式和远程模式 纯通过rsync的命令,来实现,数据目录A 拷贝到数据目录B 也就是模拟cp的用法 很简单 1.安装 yum install rsync -y 2.命令语法,分几个模式 - 本地模式 rsync 参数 源路径 目标路径 rsync -xxxxx /var…...
Android 实现首页Tab切换并且支持懒加载功能详解
目录 1. 添加依赖2. 布局文件3. 创建 Fragment4. 创建适配器5. 在 MainActivity 中设置 TabLayout 和 ViewPager2 1. 添加依赖 在 build.gradle 文件中添加以下依赖: implementation androidx.viewpager2:viewpager2:1.1.0-beta01 implementation com.google.andr…...
[Android] 360行车记录仪谷歌版
[Android] 360行车记录仪谷歌版 链接:https://pan.xunlei.com/s/VOIQYq-jmW8Jpb8y3EIA3YdtA1?pwd3abw# 新买的360行车记录仪,配套软件让安装360智慧生活软件,二百多兆,各种功能齐全、忒齐全,好多用不到,…...
基于Redis分布式锁
1. 获取锁的过程 使用SETNX命令:SETNX(SET if Not eXists)是一个原子操作,它会在指定的key不存在时,将key的值设置为给定的value,并返回1;如果key已经存在,则不做任何操作࿰…...
告别重复造轮子:用快马AI一键生成openclaw项目高效串口调试工具
在机器人开发过程中,串口通信是最基础也最频繁使用的功能之一。无论是传感器数据采集、电机控制指令下发,还是与各种硬件模块的交互,都离不开串口通信的支持。然而每次新项目都要从头实现串口通信功能,不仅浪费时间,还…...
Qwen3-14B部署后效果追踪:30天使用数据与关键指标增长分析
Qwen3-14B部署后效果追踪:30天使用数据与关键指标增长分析 1. 部署效果概览 在RTX 4090D 24GB显存环境下部署Qwen3-14B镜像后,我们对系统进行了为期30天的持续监测。数据显示,这套优化配置展现出令人印象深刻的稳定性和性能表现:…...
LangChain框架使用说明
LangChain框架的安装与环境配置 LangChain的安装可通过Python包管理器快速完成。核心库包括langchain、langchain-community和langchain-core,建议使用以下命令进行完整安装: pip install langchain langchain-community langchain-core openai环境配…...
从Java到AI Agent:传统后端工程师的下一站,不是学AI,是成为系统工程师!
文章探讨了在AI技术发展的背景下,传统后端工程师的转型方向。作者认为,未来的竞争焦点不再是单纯的技术能力,而是如何将AI技术融入现有系统,构建自动化系统。文章提出了AI Agent工程师的概念,强调系统工程能力的重要性…...
Honey Select 2终极增强补丁:3分钟快速配置完整模组生态
Honey Select 2终极增强补丁:3分钟快速配置完整模组生态 【免费下载链接】HS2-HF_Patch Automatically translate, uncensor and update HoneySelect2! 项目地址: https://gitcode.com/gh_mirrors/hs/HS2-HF_Patch 你是否曾为《Honey Select 2》的模组安装繁…...
告别重复造轮子:用快马AI一键生成蓝桥杯单片机高效开发模块库
告别重复造轮子:用快马AI一键生成蓝桥杯单片机高效开发模块库 参加蓝桥杯单片机比赛的同学都知道,备赛过程中最耗时的往往不是算法设计,而是各种底层模块的调试。从矩阵键盘的消抖处理到温度传感器的数据读取,这些看似简单的功能…...
Virtual-Display-Driver:Windows虚拟显示器的全能解决方案深度解析
Virtual-Display-Driver:Windows虚拟显示器的全能解决方案深度解析 【免费下载链接】Virtual-Display-Driver Add virtual monitors to your windows 10/11 device! Works with VR, OBS, Sunshine, and/or any desktop sharing software. 项目地址: https://gitco…...
威联通NAS安全防护全攻略:10个必做设置让你的数据固若金汤
威联通NAS安全防护全攻略:10个必做设置让你的数据固若金汤 在数字化时代,数据安全已成为个人和企业最关注的议题之一。威联通NAS作为专业级网络存储设备,凭借其强大的硬件性能和丰富的软件生态,成为许多用户存储重要数据的首选。然…...
图的存储方式详解(邻接矩阵 + 邻接表)| 算法入门必看
在算法学习中,图是仅次于树的核心数据结构,广泛应用于路径规划、网络拓扑、社交关系等场景。而图的存储是后续图论算法(DFS、BFS、最短路等)的基础——选择合适的存储方式,能直接影响算法的时间和空间效率。 本文将详细讲解图的两种最常用存储方式:邻接矩阵和邻接表,从…...
YimMenu:GTA5游戏体验增强与安全防护指南
YimMenu:GTA5游戏体验增强与安全防护指南 【免费下载链接】YimMenu YimMenu, a GTA V menu protecting against a wide ranges of the public crashes and improving the overall experience. 项目地址: https://gitcode.com/GitHub_Trending/yi/YimMenu 项目…...
