推荐答案
在 FastAPI 中,可以通过定义一个异步函数并使用 @app.middleware("http") 装饰器来创建中间件。以下是一个简单的示例:
// www.javascriptcn.com code example
from fastapi import FastAPI, Request
app = FastAPI()
@app.middleware("http")
async def custom_middleware(request: Request, call_next):
# 在请求处理之前执行的代码
print("Before request")
# 调用下一个中间件或路由处理函数
response = await call_next(request)
# 在响应返回之前执行的代码
print("After request")
return response
@app.get("/")
async def root():
return {"message": "Hello World"}本题详细解读
中间件的作用
中间件是一种在请求到达路由处理函数之前或响应返回客户端之前执行的代码。它可以用于多种用途,例如日志记录、身份验证、请求修改等。
中间件的定义
在 FastAPI 中,中间件是一个异步函数,它接收两个参数:
request: 当前的请求对象。call_next: 一个可调用对象,用于调用下一个中间件或路由处理函数。
中间件的执行流程
- 请求处理前:在
call_next(request)之前执行的代码会在请求到达路由处理函数之前运行。 - 请求处理后:在
call_next(request)之后执行的代码会在响应返回客户端之前运行。
示例代码解析
@app.middleware("http"):这个装饰器用于将custom_middleware函数注册为 HTTP 中间件。request: Request:request参数是 FastAPI 提供的Request对象,包含了当前请求的所有信息。call_next(request):调用call_next会将请求传递给下一个中间件或路由处理函数,并返回响应对象。response:response是路由处理函数返回的响应对象,可以在中间件中对其进行修改或记录。
使用场景
- 日志记录:在中间件中记录请求和响应的详细信息。
- 身份验证:在中间件中验证请求的合法性,例如检查 JWT 令牌。
- 请求修改:在中间件中修改请求头或请求体。
- 响应修改:在中间件中修改响应头或响应体。
通过这种方式,FastAPI 提供了灵活且强大的中间件机制,使得开发者可以在请求处理的不同阶段插入自定义逻辑。