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

FastAPI 学习之路(三十)中间件

什么是中间件呢?“中间件”是一个函数,它在每个请求被特定的路径操作处理之前,以及在每个响应返回之前工作。

1. 它接受你的应用程序的每一个请求

2. 它可以对这个请求做一些事情或者执行任何需要的代码

3. 它将请求传递给应用程序的其他部分(通过某种路径操作)

4. 它获取应用程序生产的响应(通过某种路径操作)

5. 它可以对响应做些什么或者执行任何需要的代码

6. 它返回这个响应

那么看下如何创建中间件?

要创建中间件你可以在函数的顶部使用装饰器@app.middleware("http") 

中间件接受如下参数:

        1. request,不能省略

        2. 一个函数 call_next,它将接收request作为参数

                这个函数将request传递给响应的路径操作

                然后它将返回由响应路径操作生成的response

        3.然后你可以在返回response前进一步修改它

我们去实现一个中间件

from fastapi import FastAPI, Request
import time

app = FastAPI()

@app.middleware("http")
async def add_process_time_header(request: Request, call_next):
    start_time = time.time()
    response = await call_next(request)
    process_time = time.time() - start_time
    response.headers["X-Process-Time"] = str(process_time)
    response.headers["mrli"] = "mrli"
    return response


@app.get("/test_middleware")
def test_middleware():
    return "this is test middleware"



if __name__ == '__main__':
    import uvicorn
    uvicorn.run("main:app", reload=True, debug=True)

我们这样就实现了一个中间件,在response的前后在任何路径操作收到request前,可以添加要和请求一起运行的代码,也可以在响应生成但是返回之前添加代码。

请求下接口看下输出结果,正常返回我们自己定义的输出结果是没有问题的

 我们再看下响应头返回的结果

 可以看到,响应头信息中有我们自己定义的中间件处理的结果,到此一个简单的中间件就实现了

相关文章:

  • Springboot整合redis
  • Python对象序列化
  • Linux-Linux内核-进程调度
  • LabVIEW重入:允许同时调用同一子VI
  • 『网易实习』周记(五)
  • 【glib】vs2022 v163 debug win32: meson构建 glib-2.67.6
  • JlinkV9的Vtref详解
  • Thinkphp5.1对接ueditor(自定义上传接口)
  • “双非”渣本投岗爱奇艺(Java),三轮技术面等消息,侥幸通过!
  • FlinkSQL系列04-CDC连接器
  • 包-node.js中的第三方模块
  • vscode 个人实用插件(资源集合)
  • GTOT-Toolkit模板参考
  • [贪心]Min-Max Array Transformation Codeforces1721C
  • 猿创征文|【算法入门必刷】数据结构-栈(二)
  • 08.Android之View事件问题
  • 2017-09-12 前端日报
  • gcc介绍及安装
  • Java知识点总结(JDBC-连接步骤及CRUD)
  • Laravel 菜鸟晋级之路
  • magento 货币换算
  • Nginx 通过 Lua + Redis 实现动态封禁 IP
  • React-Native - 收藏集 - 掘金
  • 看图轻松理解数据结构与算法系列(基于数组的栈)
  • 视频flv转mp4最快的几种方法(就是不用格式工厂)
  • 问题之ssh中Host key verification failed的解决
  • 怎么将电脑中的声音录制成WAV格式
  • 职业生涯 一个六年开发经验的女程序员的心声。
  • Play Store发现SimBad恶意软件,1.5亿Android用户成受害者 ...
  • #NOIP 2014# day.2 T2 寻找道路
  • (1)bark-ml
  • (附源码)spring boot公选课在线选课系统 毕业设计 142011
  • (牛客腾讯思维编程题)编码编码分组打印下标(java 版本+ C版本)
  • (亲测)设​置​m​y​e​c​l​i​p​s​e​打​开​默​认​工​作​空​间...
  • (三)c52学习之旅-点亮LED灯
  • (算法)N皇后问题
  • (原創) 未来三学期想要修的课 (日記)
  • .gitignore文件设置了忽略但不生效
  • .locked1、locked勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .NET CF命令行调试器MDbg入门(二) 设备模拟器
  • .NET Core 和 .NET Framework 中的 MEF2
  • .NET Framework 和 .NET Core 在默认情况下垃圾回收(GC)机制的不同(局部变量部分)
  • .NET框架
  • .NET微信公众号开发-2.0创建自定义菜单
  • 。Net下Windows服务程序开发疑惑
  • /dev/VolGroup00/LogVol00:unexpected inconsistency;run fsck manually
  • []我的函数库
  • [2019.3.5]BZOJ1934 [Shoi2007]Vote 善意的投票
  • [ACL2022] Text Smoothing: 一种在文本分类任务上的数据增强方法
  • [AutoSar]BSW_OS 02 Autosar OS_STACK
  • [BUUCTF NewStarCTF 2023 公开赛道] week3 crypto/pwn
  • [BZOJ1010] [HNOI2008] 玩具装箱toy (斜率优化)
  • [C++随笔录] 红黑树
  • [codevs 1288] 埃及分数 [IDdfs 迭代加深搜索 ]
  • [flask]http请求//获取请求体数据