当前位置: 首页 > article >正文

lil_tea c++ style guide巢

一、中间件是啥咱用“餐厅”打个比方想象一下你的FastAPI应用是个高级餐厅。?? 顾客客户端请求来到门口。- 迎宾CORS中间件先看你是不是从允许的街区域名来的不是就直接劝退返回CORS错误。- 领位员日志中间件记下顾客几点来的、几个人。- 安检认证中间件检查你有没有预约码Token。?? 之后顾客才能见到真正的厨师你的路径操作函数点菜吃饭处理业务逻辑。?? 吃完离开时还得经过传菜员响应处理中间件可能给打包盒贴个标签添加响应头。这一系列站在“核心业务”前后的服务人员就是中间件。它的核心价值在于全局处理、业务无侵入。官方文档讲得比较散咱们今天就把这块硬骨头啃透直接上代码。?? 二、核心怎么用从最常用的CORS开始好咱们先来解决开头的“跨域”问题。这是99%的Web应用都会遇到的。from fastapi import FastAPIfrom fastapi.middleware.cors import CORSMiddlewareapp FastAPI()# 1. 配置允许的源、方法、请求头origins [http://localhost:3000, # 你的前端开发地址https://your-production-site.com,]# 2. 添加中间件app.add_middleware(CORSMiddleware,allow_originsorigins, # 允许的源列表也可以用 [*] 放行所有不安全allow_credentialsTrue, # 允许携带Cookieallow_methods[*], # 允许所有方法 (GET, POST, 等)allow_headers[*], # 允许所有请求头)app.get(/)async def main():return {message: Hello World}这里千万别学我当初偷懒图省事直接上 allow_origins[*]这在生产环境是安全大忌相当于餐厅大门敞开谁都能进。线上务必明确指定前端域名?? 三、动手写一个自己的中间件接下来重点来了自定义中间件。比如我们要给每个请求记日志并计算处理耗时。import timefrom fastapi import FastAPI, Requestapp FastAPI()app.middleware(http) # 这是关键装饰器async def log_request_time(request: Request, call_next):# 1. 请求进来时# 这里我们使用 time.perf_counter() 而不是 time.time()因为它对于这些用例可能更精确start_time time.perf_counter()path request.url.pathmethod request.methodprint(f?? 收到请求: {method} {path})# 2. 把请求交给下一个处理环节可能是其他中间件或者是最终的路由response await call_next(request)# 3. 响应返回前process_time time.perf_counter() - start_timeresponse.headers[X-Process-Time] str(process_time) # 可以往响应头加东西print(f? 请求完成: {method} {path}, 耗时: {process_time:.4f}秒)return responseapp.get(/test)async def test():return {message: ok}访问 /test看看控制台是不是日志和响应头都有了这就是一个最基础的HTTP中间件。划重点 中间件函数接收一个 call_next它就像接力棒你必须调用它await call_next(request)请求才能继续往后走。你在它前面和后面写的代码就分别对应了“请求处理”和“响应处理”两个阶段。?? 四、灵魂拷问多个中间件谁先谁后你是不是以为加完就完事了多个中间件的执行顺序是超级易错点想象一下你既加了CORS中间件又加了上面的日志中间件还加了一个认证中间件。它们怎么排队结论按照添加的相反顺序执行“请求阶段”再按照添加的正序执行“响应阶段”。 像洋葱一样一层层进去再一层层出来。app FastAPI()# 假设我们按顺序添加三个中间件app.add_middleware(MiddlewareC) # 第三个添加app.add_middleware(MiddlewareB) # 第二个添加app.middleware(http)(middleware_a) # 第一个添加装饰器写法# 实际执行顺序请求阶段# 1. middleware_a 的请求处理代码# 2. MiddlewareB 的请求处理代码# 3. MiddlewareC 的请求处理代码# --- 到达路由函数 ---# 4. MiddlewareC 的响应处理代码# 5. MiddlewareB 的响应处理代码# 6. middleware_a 的响应处理代码# --- 响应返回给客户端 ---官方文档虽然说了是“装饰器顺序”但用 app.add_middleware() 添加时更容易迷糊。记不住就背下这个口诀“后来居上请求原路返回响应”。 设计时要把依赖关系想清楚比如认证应该放在靠“里”层后添加日志可以放在最“外”层先添加。?? 五、进阶更底层的ASGI中间件再说个容易翻车的点。上面我们用 app.middleware(http) 叫HTTP中间件是FastAPI封装好的。还有一种更底层、更强大的叫ASGI中间件。它和HTTP中间件啥区别好比一个是高级餐厅的固定流程HTTP另一个是后厨的原子操作ASGI能处理WebSocket等更多协议。怎么用通常你需要一个第三方库比如 starlette-context 来在请求中传递全局数据或者自己封装FastAPI在fastapi.middleware中提供了几个中间件仅仅是为了方便开发者但大多数可用的中间件直接来自Starlettefrom fastapi import FastAPIfrom starlette.middleware.base import BaseHTTPMiddlewareclass CustomHeaderMiddleware(BaseHTTPMiddleware):async def dispatch(self, request, call_next):response await call_next(request)response.headers[X-Custom-Header] MyValuereturn responseapp FastAPI()app.add_middleware(CustomHeaderMiddleware) # 这里添加的就是ASGI中间件注意 BaseHTTPMiddleware 使用简单但官方提示可能有轻微性能损耗因为每个请求都会创建新的类实例。对于超高并发场景用之前的函数式 app.middleware(http) 或直接写纯ASGI中间件是更优解。??嘏稍驮靶

相关文章:

lil_tea c++ style guide巢

一、中间件是啥?咱用“餐厅”打个比方 想象一下,你的FastAPI应用是个高级餐厅。 ?? 顾客(客户端请求)来到门口。- 迎宾(CORS中间件):先看你是不是从允许的街区(域名)来…...

PhotoshopCClinux部署实战:企业环境批量安装的10个最佳实践技巧

PhotoshopCClinux部署实战:企业环境批量安装的10个最佳实践技巧 【免费下载链接】photoshopCClinux Photoshop CC v19 installer for Gnu/Linux 项目地址: https://gitcode.com/gh_mirrors/ph/photoshopCClinux 在企业环境中高效部署Photoshop CC v19到多台L…...

GPU加速MediaPipe TouchDesigner插件终极指南:从零构建实时视觉交互

GPU加速MediaPipe TouchDesigner插件终极指南:从零构建实时视觉交互 【免费下载链接】mediapipe-touchdesigner GPU Accelerated MediaPipe Plugin for TouchDesigner 项目地址: https://gitcode.com/gh_mirrors/me/mediapipe-touchdesigner MediaPipe Touch…...

M2LOrder模型Node.js环境配置与项目脚手架生成指南

M2LOrder模型Node.js环境配置与项目脚手架生成指南 你是不是也遇到过这种情况?想用Node.js快速启动一个新项目,特别是想集成像M2LOrder这样的AI模型,结果光是环境配置就折腾了半天。装Node版本不对,依赖冲突,项目结构…...

终极Virtual Kubelet性能优化指南:10个实用调优策略提升大规模容器部署效率

终极Virtual Kubelet性能优化指南:10个实用调优策略提升大规模容器部署效率 【免费下载链接】virtual-kubelet Virtual Kubelet is an open source Kubernetes kubelet implementation. 项目地址: https://gitcode.com/gh_mirrors/vi/virtual-kubelet Virtua…...

Zotero PDF预览插件:告别窗口切换,让文献管理效率提升300%

Zotero PDF预览插件:告别窗口切换,让文献管理效率提升300% 【免费下载链接】zotero-pdf-preview Preview Zotero attachments in the library view. 项目地址: https://gitcode.com/gh_mirrors/zo/zotero-pdf-preview 你是否曾在文献海洋中迷失方…...

King Phisher插件开发教程:扩展你的钓鱼工具包功能

King Phisher插件开发教程:扩展你的钓鱼工具包功能 【免费下载链接】king-phisher Phishing Campaign Toolkit 项目地址: https://gitcode.com/gh_mirrors/ki/king-phisher King Phisher是一款功能强大的钓鱼活动工具包,从1.3.0版本开始引入了插件…...

HunyuanVideo-Foley部署案例:高校数字媒体实验室AI音效教学平台

HunyuanVideo-Foley部署案例:高校数字媒体实验室AI音效教学平台 1. 项目背景与需求 在数字媒体教学领域,音效制作一直是实践教学中的难点。传统音效制作需要专业录音设备和后期处理软件,不仅设备成本高,学习曲线也较为陡峭。某高…...

辅助驾驶场景应用:如何用视觉定位模型理解道路目标

辅助驾驶场景应用:如何用视觉定位模型理解道路目标 1. 从“指哪打哪”到“看懂路况”:视觉定位在辅助驾驶中的价值 想象一下,你坐在副驾驶,用手指着前方说:“注意右边那辆白色轿车,它可能要变道。” 驾驶…...

提升Docker镜像构建效率的10个秘诀:Docker Buildx和Bake高级构建技巧

提升Docker镜像构建效率的10个秘诀:Docker Buildx和Bake高级构建技巧 【免费下载链接】docs Source repo for Dockers Documentation 项目地址: https://gitcode.com/gh_mirrors/docs3/docs Docker Buildx和Bake是Docker生态系统中强大的高级构建工具&#x…...

深求·墨鉴部署常见问题解决:从环境配置到模型下载的避坑指南

深求墨鉴部署常见问题解决:从环境配置到模型下载的避坑指南 1. 环境准备与系统要求 1.1 硬件配置建议 在部署「深求墨鉴」之前,确保您的设备满足以下硬件要求: CPU:至少4核处理器,推荐Intel i5或同等性能以上的CPU…...

Zotero PDF预览插件终极指南:告别频繁切换,实现高效文献管理

Zotero PDF预览插件终极指南:告别频繁切换,实现高效文献管理 【免费下载链接】zotero-pdf-preview Preview Zotero attachments in the library view. 项目地址: https://gitcode.com/gh_mirrors/zo/zotero-pdf-preview 在学术研究和文献整理过程…...

ACE-Guard限制器:终极解决游戏卡顿的完整指南

ACE-Guard限制器:终极解决游戏卡顿的完整指南 【免费下载链接】sguard_limit 限制ACE-Guard Client EXE占用系统资源,支持各种腾讯游戏 项目地址: https://gitcode.com/gh_mirrors/sg/sguard_limit 还在为腾讯游戏卡顿而烦恼吗?ACE-Gu…...

Figma中文界面插件:让设计工具真正说中文

Figma中文界面插件:让设计工具真正说中文 【免费下载链接】figmaCN 中文 Figma 插件,设计师人工翻译校验 项目地址: https://gitcode.com/gh_mirrors/fi/figmaCN 当全球顶尖的设计工具Figma遇到中文用户,语言障碍常常成为创意表达的绊…...

如何快速解密QQ音乐加密文件:终极QMC解密工具完全指南

如何快速解密QQ音乐加密文件:终极QMC解密工具完全指南 【免费下载链接】qmc-decoder Fastest & best convert qmc 2 mp3 | flac tools 项目地址: https://gitcode.com/gh_mirrors/qm/qmc-decoder 你是否曾经下载了QQ音乐的文件,却发现在其他播…...

Windows Cleaner:终极免费解决方案,轻松解决C盘爆红问题

Windows Cleaner:终极免费解决方案,轻松解决C盘爆红问题 【免费下载链接】WindowsCleaner Windows Cleaner——专治C盘爆红及各种不服! 项目地址: https://gitcode.com/gh_mirrors/wi/WindowsCleaner Windows Cleaner是一款专为Window…...

GeoJSON.io终极指南:免费在线地理数据编辑工具快速上手

GeoJSON.io终极指南:免费在线地理数据编辑工具快速上手 【免费下载链接】geojson.io A quick, simple tool for creating, viewing, and sharing spatial data 项目地址: https://gitcode.com/gh_mirrors/ge/geojson.io GeoJSON.io是一款完全免费的在线地理数…...

Expose部署实战:免费托管摄影作品集的3种最佳方案

Expose部署实战:免费托管摄影作品集的3种最佳方案 【免费下载链接】Expose A simple static site generator for photoessays 项目地址: https://gitcode.com/gh_mirrors/ex/Expose Expose是一款简单的静态网站生成器,专为摄影作品集设计。通过它…...

像素特工Ostrakon-VL部署遇挫?5分钟看懂err.log定位加载失败

像素特工Ostrakon-VL部署遇挫?5分钟看懂err.log定位加载失败 1. 为什么需要关注err.log? 当你兴致勃勃地部署好像素特工Ostrakon-VL这个充满游戏感的零售场景分析工具,却发现Web界面一片空白或者报错时,第一反应可能是"哪里…...

如何快速掌握lilToon:打造惊艳虚拟角色着色器的终极Unity指南

如何快速掌握lilToon:打造惊艳虚拟角色着色器的终极Unity指南 【免费下载链接】lilToon Feature-rich shaders for avatars 项目地址: https://gitcode.com/gh_mirrors/li/lilToon lilToon是一款功能丰富的Unity着色器工具,专为虚拟角色设计&…...

HsMod终极指南:让炉石传说游戏体验提升300%的免费插件

HsMod终极指南:让炉石传说游戏体验提升300%的免费插件 【免费下载链接】HsMod Hearthstone Modification Based on BepInEx 项目地址: https://gitcode.com/GitHub_Trending/hs/HsMod 还在为炉石传说冗长的动画和繁琐操作烦恼吗?HsMod插件正是为你…...

市场管理化技术市场细分与目标客户选择

市场管理化技术市场细分与目标客户选择 在竞争激烈的商业环境中,企业如何精准定位客户群体并高效满足其需求,成为决定成败的关键。市场管理化技术通过科学的市场细分与目标客户选择,帮助企业挖掘潜在机会,优化资源配置&#xff0…...

终极指南:探索vscode-browser-preview的CDP协议通信机制与事件驱动架构

终极指南:探索vscode-browser-preview的CDP协议通信机制与事件驱动架构 【免费下载链接】vscode-browser-preview A real browser preview inside your editor that you can debug. 项目地址: https://gitcode.com/gh_mirrors/vs/vscode-browser-preview vsc…...

如何快速将设计稿转换为动画:AEUX终极动效制作指南

如何快速将设计稿转换为动画:AEUX终极动效制作指南 【免费下载链接】AEUX Editable After Effects layers from Sketch artboards 项目地址: https://gitcode.com/gh_mirrors/ae/AEUX 还在为Figma到After Effects的转换烦恼吗?AEUX设计稿转换插件…...

揭秘babel-minify插件架构:20+核心插件如何实现JS极致压缩

揭秘babel-minify插件架构:20核心插件如何实现JS极致压缩 【免费下载链接】minify :scissors: An ES6 aware minifier based on the Babel toolchain (beta) 项目地址: https://gitcode.com/gh_mirrors/mi/minify 什么是babel-minify? babel-min…...

抖音视频下载技术深度解析:从API逆向到批量下载的完整实现

抖音视频下载技术深度解析:从API逆向到批量下载的完整实现 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback s…...

intv_ai_mk11效果展示:机器学习定义、工作效率建议、方案润色等原生输出

intv_ai_mk11效果展示:机器学习定义、工作效率建议、方案润色等原生输出 1. 模型效果概览 intv_ai_mk11是一款基于Llama架构的文本生成模型,特别适合处理日常办公场景中的各类文本任务。通过实际测试,我们发现它在以下几个方面表现尤为出色…...

RTX 4090D+PyTorch 2.8实战:从零开始你的第一个AI项目

RTX 4090DPyTorch 2.8实战:从零开始你的第一个AI项目 1. 环境准备与快速验证 1.1 镜像优势解析 这个预装PyTorch 2.8的深度学习镜像专为RTX 4090D 24GB显卡优化,解决了AI开发者常见的三大痛点: 环境冲突:预装所有必要组件&…...

OpenFGA错误排查终极指南:从入门到精通的常见问题与解决方案汇总

OpenFGA错误排查终极指南:从入门到精通的常见问题与解决方案汇总 【免费下载链接】openfga A high performance and flexible authorization/permission engine built for developers and inspired by Google Zanzibar 项目地址: https://gitcode.com/gh_mirrors/…...

京东完成100亿元票据发行 部分用于偿还现有债务及支付利息

雷递网 乐天 4月11日京东集团(股份代号:9618(港币柜台)及89618(人民币柜台))日前发布公告称,完成其发行本金总额为100亿元的以人民币计值的优先无担保票据(「该等票据」&…...