首页 > 其他分享 >fastapi middleware中间件

fastapi middleware中间件

时间:2024-09-06 09:36:57浏览次数:12  
标签:fastapi middleware 中间件 time import app

一、介绍

FastAPI中的中间件(Middleware)是一个非常重要的概念,它允许开发者在请求被处理之前和响应被发送之前执行自定义逻辑。中间件在Web应用程序中扮演着桥梁的角色,连接着客户端的请求和服务器端的响应处理过程。以下是FastAPI中间件概念的详细解释:

1. 中间件的定义

在FastAPI中,中间件是一个函数,它在每个请求被特定的路径操作处理之前,以及在每个响应返回给客户端之前执行。中间件可以执行诸如日志记录、身份验证、请求/响应修改等跨路径操作的通用逻辑。

2. 中间件的作用

  • 请求处理前:中间件可以在请求到达处理函数之前执行一些逻辑,如记录请求信息、进行身份验证、修改请求数据等。
  • 响应处理前:在处理函数生成响应后,但在响应返回给客户端之前,中间件可以执行一些逻辑,如修改响应头、记录响应信息等。

 

二、示例

中间件可以通过装饰器@app.middleware("http")来定义,或者通过app.add_middleware()方法直接添加到应用程序中

1、官方demo

import time
from fastapi import FastAPI, Request

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)
    return response

 

2、自定义中间件

创建 app/middleware/headers.py。中间件的实现是通过继承BaseHTTPMiddleware类并定义dispatch方法来实现的。dispatch方法是中间件的核心,因为它定义了中间件如何处理进入的请求(Request)和如何接收或修改响应(Response)。

import time
from fastapi import Request
from starlette.middleware.base import BaseHTTPMiddleware
from starlette.responses import Response


class UseTimeMiddleware(BaseHTTPMiddleware):
    """ 计算耗时中间件"""

    def __init__(self, app):
        super().__init__(app)

    # 重写BaseHTTPMiddleware类中的dispatch方法        
    async def dispatch(self, request: Request, call_next) -> Response:
        """ 请求耗时 """
        start_time = time.time()
        # 调用下一个中间件或路由处理函数
        response = await call_next(request)
        process_time = time.time() - start_time
        response.headers["X-Process-Time"] = str(process_time)
        return response

app/middleware/__init__.py,封装中间件注册函数

from fastapi import FastAPI
from .headers import UseTimeMiddleware

def registerMiddlewareHandle(app: FastAPI):
    # 添加耗时请求中间件
    app.add_middleware(UseTimeMiddleware)

初始化fastapi

from app import errors, middleware
...

# 实例化
app = FastAPI()

# # 注册中间件
middleware.registerMiddlewareHandle(app)

 

三、常用中间件

1、跨域中间件

from fastapi.middleware.cors import CORSMiddleware

# 注册
 server.add_middleware(
        CORSMiddleware,
        allow_origins=["*"],  # 允许的来源,可以是字符串、字符串列表,或通配符 "*"
        allow_credentials=True,  # 是否允许携带凭证(例如,使用 HTTP 认证、Cookie 等)
        allow_methods=["*"],  # 允许的 HTTP 方法,可以是字符串、字符串列表,或通配符 "*"
        allow_headers=["*"],  # 允许的 HTTP 头信息,可以是字符串、字符串列表,或通配符 "*"
        expose_headers=["*"],  # 允许前端访问的额外响应头,可以是字符串、字符串列表
        max_age=600,  # 请求的缓存时间,以秒为单位
    )

 

2、Gzip压缩中间件

from fastapi.middleware.gzip import GZipMiddleware

# 注册
server.add_middleware(
    GZipMiddleware,
    minimum_size=500,   # 启用 Gzip 压缩的最小响应体大小,单位为字节
    compresslevel=6   # Gzip 压缩级别,范围为 0 到 9,级别越高,压缩率越高,但耗费的 CPU 越多
)

 

标签:fastapi,middleware,中间件,time,import,app
From: https://www.cnblogs.com/shenh/p/18375983

相关文章

  • 中间件解析漏洞(附环境搭建教程)
    ⼀:IIS解析漏洞环境资源:https://download.csdn.net/download/Nai_zui_jiang/89717504环境安装windows2003+iis61.创建新的虚拟机2.在下⼀步中选择我们的iso⽂件镜像vm已主动识别到windows20033.产品密钥⽹上搜⼀个密码自己设置一个简单的,这里我用的......
  • 中间件解析漏洞
    ⼀:IIS解析漏洞1.1:IIS6.X在iis6.x中,.asp⽂件夹中的任意⽂件都会被当做asp⽂件去执⾏。1.在iis的⽹站根⽬录新建⼀个名为x.asp的⽂件,在x.asp中新建⼀个jpg⽂件。内容为<%=now()%>asp代码2.在外部浏览器中访问windows2003的iis⽹站中的2.jpg发现asp代码被执行......
  • 中间件解析漏洞
    1、IIS1.iis6.x(1)在iis的网站根目录新建一个x.asp文件(2)在x.asp中新建⼀个jpg⽂件。内容为asp代码。(3)在外部浏览器中访问windows2003的iis⽹站中的2.jpg发现asp代码被执⾏(4)将2.jpg⽂件放到⽹站根⽬录下访问,发现其中的asp代码没有被解析。由此可⻅.asp⽂件夹中的任意......
  • django 自定义中间件
    概述中间件是Django请求/响应处理的框架,用于全局改变Django的请求输入或响应输出。在请求阶段,在调用视图之前,Django按照定义settings.MIDDLEWARE的顺序应用中间件MIDDLEWARE,自顶向下。中间件的结构:classSimpleMiddleware:def__init__(self,get_response):......
  • Gin使用zap替换默认的两个日志中间件
    packagemainimport( "encoding/json" "fmt" "github.com/gin-gonic/gin" "github.com/natefinch/lumberjack" "go.uber.org/zap" "go.uber.org/zap/zapcore" "net" "net/http"......
  • Egg.js配置登录验证中间件jwt
    Egg.js配置登录验证中间件一、安装jwtnpminstallegg-jwt二、安装完成后在config--》plugin.js文件中开启jwt插件"usestrict";module.exports={jwt:{enable:true,package:"egg-jwt",},}三、在app文件夹下创建middleware文件夹,创建verif......
  • IIS中间件
    中间件中间件是一类软件,为应用程序、服务和组件提供一个通用的服务层。主要功能通信:提供通信框架,帮助不同系统与应用之间进行数据交换和通信事务管理、资源管理安全服务:提供认证、授权、加密等安全策略数据访问:提供统一的数据访问接口,简化数据库或其他存储数据的访问IIS是......
  • FastAPI+Vue3零基础开发ERP系统项目实战课 20240831上课笔记 查询参数和分页实现
    回顾获取路径参数什么是路径参数?/user/{id}什么时候使用?需要传递参数怎么实现类型转换?声明参数的类型怎么捕获文件路径?{file_path:path}什么是查询参数查询字符串是键值对的集合,这些键值对位于URL的?之后,以&分隔。http://127.0.0.1:8000/items/?skip=0&limit=10......
  • 中间件
    internalclassProgram{staticasyncTaskMain(string[]args){varappBuilder=newAppBuilder();appBuilder.Use(next=>{returnasynccontext=>{Console.WriteLine("中......
  • 一个练习项目,好玩的bbs-python-fastapi
    代码:fromfastapiimportFastAPI,Response,Cookie,Dependsfromfastapi.responsesimportJSONResponsefromfastapi.responsesimportHTMLResponseimportos.pathimportMySQLdbimportjsonimporthashlibimportrandomimportmathimportosfromdatetimeim......