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

FastAPI学习(四)——中间件

FastAPI中间件

中间件

中间件就是传话的人,消息进来的时候带进来,消息发出的时候带出去,在带进来和带出去的过程中可以自定义一些处理操作。

写法

在FastAPI中,可以通过装饰器@app.middleware()或者调用函数app.add_middleware()的方式注册中间件,先注册的中间件靠近信息处理中心,后注册的包在外面。

import timefrom fastapi import FastAPI, Requestapp = FastAPI()# 所有http请求都会通过这个中间件,目前暂且只有这一种
# 这里指的是基于ASGI的HTTP协议事件,HTTPS = HTTP + TLS加密层,在到达FastAPI之前已经解密了
@app.middleware("http")
async def add_process_time_header(request: Request, call_next):# 传送request途中start_time = time.perf_counter()# 把request送给路径操作函数response = await call_next(request)# 送出response途中process_time = time.perf_counter() - start_time# 在header中加入自定义的属性,注意添加自定义属性需要以"X-"前缀开头。response.headers["X-Process-Time"] = str(process_time)return response

CORS 跨域资源共享

Cross Origin Resource Sharing

这里的Origin(源/域)指的是:协议、域名、端口的总和,必须三个都一样才叫一个源。

在实际开发中,CORS主要解决前后端分离时的跨域问题、团队协作开发的跨域问题。

FastAPI提供了内置的CORS支持,让跨域资源共享的配置变得简单而灵活。

  1. 安装和导入
from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddlewareapp = FastAPI()
  1. 添加CORS中间件
app.add_middleware(CORSMiddleware,allow_origins=["https://localhost:3000"],  # 允许的源allow_credentials=True,                    # 允许携带凭证allow_methods=["*"],                       # 允许的HTTP方法allow_headers=["*"],                       # 允许的请求头
)

详细参数说明:

allow_origins
指定允许访问的源列表:

# 允许特定域名
allow_origins=["https://localhost:3000","https://myapp.com","https://www.myapp.com"
]# 允许所有域名(开发环境)
allow_origins=["*"]# 使用正则表达式
allow_origin_regex=r"https://.*\.myapp\.com"

allow_methods
指定允许的HTTP方法:

# 允许所有方法
allow_methods=["*"]# 允许特定方法
allow_methods=["GET", "POST", "PUT", "DELETE"]# 只允许读操作
allow_methods=["GET", "HEAD", "OPTIONS"]

allow_headers
指定允许的请求头:

# 允许所有请求头
allow_headers=["*"]# 允许特定请求头
allow_headers=["Content-Type", "Authorization", "X-Requested-With"]

allow_credentials
是否允许携带凭证(cookies、authorization headers等):

# 允许携带凭证
allow_credentials=True# 不允许携带凭证
allow_credentials=False

文章转载自:

http://NO5v3HYn.pnmtk.cn
http://Lb6UYPJL.pnmtk.cn
http://rhzp9NoO.pnmtk.cn
http://A6C9Mpc8.pnmtk.cn
http://jmlJpRI8.pnmtk.cn
http://uwnKIZ1C.pnmtk.cn
http://AD0YZzjt.pnmtk.cn
http://jKZVGUxK.pnmtk.cn
http://l31M3wX5.pnmtk.cn
http://IPrFFvtp.pnmtk.cn
http://W32Bsfbw.pnmtk.cn
http://bioaLmNz.pnmtk.cn
http://1arSeFxn.pnmtk.cn
http://rPYNGlvt.pnmtk.cn
http://UqUhCp3W.pnmtk.cn
http://ecf4I6VQ.pnmtk.cn
http://RAR6NJdC.pnmtk.cn
http://0QBGttIX.pnmtk.cn
http://6C9UVPYU.pnmtk.cn
http://kkl6P90h.pnmtk.cn
http://27I6eDsl.pnmtk.cn
http://wrdbzNO6.pnmtk.cn
http://bmNhHUqg.pnmtk.cn
http://BgWj6iFp.pnmtk.cn
http://mizizV6c.pnmtk.cn
http://FnaH2en2.pnmtk.cn
http://Cb5UtxAp.pnmtk.cn
http://HH670zuI.pnmtk.cn
http://B8xrtu2S.pnmtk.cn
http://Auycq7uM.pnmtk.cn
http://www.dtcms.com/a/380782.html

相关文章:

  • 维特imu ros2-foxy
  • Dubbo2 与 Dubbo3 的主要区别与演进
  • 【二分查找】
  • 新疆移动中兴B862AV3.1-M2_晨星mso9385_uwe5621ds_优盘免拆卡刷固件包
  • C++:map容器
  • Java内存模型与线程私有共享区域与直接内存的理解
  • MCP专题五、MCP 的未来趋势与展望
  • SIFT特征匹配实战:KNN算法实现指纹认证
  • ETL 不只是数据搬运工:如何实现智能转换与清洗?
  • UDP套接字的使用
  • 【Vue2手录11】Vue脚手架(@vue_cli)详解(环境搭建+项目开发示例)
  • Vue 使用docx-preview,渲染word后,继续其他操作(word中内容相关)的实现
  • [优选算法专题二——NO.16最小覆盖子串]
  • Nginx生产级优化配置全解析和配置原因解析
  • 14自由度汽车动力学模型
  • FS950R08A6P2B 双通道汽车级IGBT模块Infineon英飞凌 电子元器件核心解析
  • 交换机协议栈FRR中使用
  • C++ 二叉搜索树的详解与实现
  • 记录:离线部署
  • python逆向-逆向pyinstaller打包的exe程序反编译获取源代码
  • 最大连续 1 的个数
  • LVS负载均衡群集和LVS+Keepalived群集
  • 嵌入式开发:中断配置全解析
  • 【Vue3】07-利用setup编写vue(2)-setup的语法糖
  • 使用 信号量(Semaphore) 来控制异步任务并发数
  • 1688 商品 API 实战指南:B2B 场景下的合规对接与批量运营方案
  • Qt Bridge for Figma
  • 解决docker配置了镜像源但还会拉取官方镜像源的问题
  • 【JavaEE】网络原理初识
  • 操作系统应用开发(七)mac苹果模拟器——东方仙盟练气期