如何在 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已经存在,则不做任何操作࿰…...
【网络】每天掌握一个Linux命令 - iftop
在Linux系统中,iftop是网络管理的得力助手,能实时监控网络流量、连接情况等,帮助排查网络异常。接下来从多方面详细介绍它。 目录 【网络】每天掌握一个Linux命令 - iftop工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景…...

基于ASP.NET+ SQL Server实现(Web)医院信息管理系统
医院信息管理系统 1. 课程设计内容 在 visual studio 2017 平台上,开发一个“医院信息管理系统”Web 程序。 2. 课程设计目的 综合运用 c#.net 知识,在 vs 2017 平台上,进行 ASP.NET 应用程序和简易网站的开发;初步熟悉开发一…...
macOS多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用
文章目录 问题现象问题原因解决办法 问题现象 macOS启动台(Launchpad)多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用。 问题原因 很明显,都是Google家的办公全家桶。这些应用并不是通过独立安装的…...

c#开发AI模型对话
AI模型 前面已经介绍了一般AI模型本地部署,直接调用现成的模型数据。这里主要讲述讲接口集成到我们自己的程序中使用方式。 微软提供了ML.NET来开发和使用AI模型,但是目前国内可能使用不多,至少实践例子很少看见。开发训练模型就不介绍了&am…...
rnn判断string中第一次出现a的下标
# coding:utf8 import torch import torch.nn as nn import numpy as np import random import json""" 基于pytorch的网络编写 实现一个RNN网络完成多分类任务 判断字符 a 第一次出现在字符串中的位置 """class TorchModel(nn.Module):def __in…...
scikit-learn机器学习
# 同时添加如下代码, 这样每次环境(kernel)启动的时候只要运行下方代码即可: # Also add the following code, # so that every time the environment (kernel) starts, # just run the following code: import sys sys.path.append(/home/aistudio/external-libraries)机…...
4. TypeScript 类型推断与类型组合
一、类型推断 (一) 什么是类型推断 TypeScript 的类型推断会根据变量、函数返回值、对象和数组的赋值和使用方式,自动确定它们的类型。 这一特性减少了显式类型注解的需要,在保持类型安全的同时简化了代码。通过分析上下文和初始值,TypeSc…...

[ACTF2020 新生赛]Include 1(php://filter伪协议)
题目 做法 启动靶机,点进去 点进去 查看URL,有 ?fileflag.php说明存在文件包含,原理是php://filter 协议 当它与包含函数结合时,php://filter流会被当作php文件执行。 用php://filter加编码,能让PHP把文件内容…...

LabVIEW双光子成像系统技术
双光子成像技术的核心特性 双光子成像通过双低能量光子协同激发机制,展现出显著的技术优势: 深层组织穿透能力:适用于活体组织深度成像 高分辨率观测性能:满足微观结构的精细研究需求 低光毒性特点:减少对样本的损伤…...
Bean 作用域有哪些?如何答出技术深度?
导语: Spring 面试绕不开 Bean 的作用域问题,这是面试官考察候选人对 Spring 框架理解深度的常见方式。本文将围绕“Spring 中的 Bean 作用域”展开,结合典型面试题及实战场景,帮你厘清重点,打破模板式回答,…...