郭震 AI公众号:郭震AI

25 中间件与依赖注入之中间件的概念与使用

发布日期:

分类: FastAPI教程

预计阅读: 2 分钟

阅读次数: 0

预计阅读2 分钟
结构重点4 个
图文要点0 张
正文规模829 字

在上一篇文章中,我们探讨了如何在 FastAPI 中进行错误处理,尤其是处理 HTTP 异常响应。本文将重点介绍中间件的概念以及如何在 FastAPI 中使用中间件。接下来,我们将为即将到来的依赖注入主题做好铺垫。

中间件的概念

在 Web 应用程序中,中间件是位于请求和响应处理之间的组件。它们通常用于:

  • 记录日志
  • 跨域资源共享(CORS)
  • 身份验证和授权
  • 请求修改
  • 响应修改
  • 处理请求失败的情况

在 FastAPI 中,中间件可以通过 FastAPI 的应用实例添加,它们会包裹在请求处理的过程之间。

创建中间件

要在 FastAPI 中创建中间件,我们需要使用 starlette.middleware 模块。下面是一个简单的中间件示例,它会在每个请求时记录请求的路径。

from fastapi import FastAPI
from starlette.middleware.base import BaseHTTPMiddleware

class SimpleLoggingMiddleware(BaseHTTPMiddleware):
    async def dispatch(self, request, call_next):
        # 在请求处理之前执行的操作
        print(f"请求路径: {request.url.path}")
        
        # 调用下一个中间件/处理程序
        response = await call_next(request)
        
        # 在请求处理之后执行的操作
        print(f"返回状态: {response.status_code}")
        
        return response

app = FastAPI()

# 添加中间件
app.add_middleware(SimpleLoggingMiddleware)

@app.get("/")
async def read_root():
    return {"message": "Hello, World!"}

在这个例子中,我们创建了一个 SimpleLoggingMiddleware 类,它继承了 BaseHTTPMiddleware。这个中间件会在每个请求被处理时,记录请求的路径与响应的状态码。这对于调试和跟踪请求流程非常有帮助。

中间件的顺序

请注意,中间件的执行顺序是依据它们添加的顺序。最先添加的中间件会在请求处理链的最外层,最后添加的中间件会在请求链的最内层。以下是一个示例:

class FirstMiddleware(BaseHTTPMiddleware):
    async def dispatch(self, request, call_next):
        print("第一中间件开始")
        response = await call_next(request)
        print("第一中间件结束")
        return response

class SecondMiddleware(BaseHTTPMiddleware):
    async def dispatch(self, request, call_next):
        print("第二中间件开始")
        response = await call_next(request)
        print("第二中间件结束")
        return response

app.add_middleware(FirstMiddleware)
app.add_middleware(SecondMiddleware)

在这个示例中,输出将会是:

第一中间件开始
第二中间件开始
第二中间件结束
第一中间件结束

这说明第一个中间件包裹了整个处理过程,而第二个中间件是在它的内部执行。

快速总结

  • 中间件是请求和响应之间的处理层,可以用于多种目的,例如日志记录、身份验证和请求修改等。
  • 在 FastAPI 中,可以通过 add_middleware 方法添加中间件。
  • 中间件的执行顺序是基于添加的顺序。

在接下来的文章中,我们将深入探讨依赖注入的基本用法。这是 FastAPI 的一个强大特性,可以帮助我们更好地管理应用程序的依赖关系。

希望本篇关于中间件的概念与使用的讨论能帮助你更好地理解 FastAPI 的工作机制!

分享文章

转发到常用平台

微信/朋友圈可先复制链接

相关内容

更多相关文章

返回栏目

Reader Messages

读者留言

有问题、补充资料或实测结果,可以直接留下。这里不需要登录。

最多 800 字

为了防刷,每条留言会做长度、链接数量和提交频率限制。

0/800

留言列表

0
正在加载留言...