我尝试为我的应用程序构建一个中间件。
我需要一种方法在我的中间件函数中创建一些对象,并且我想在下一个端点方法中访问该对象。请参阅我的代码示例。
from fastapi import FastAPI, Request
app = FastAPI()
@app.middleware("http")
async def add_process_time_header(request: Request, call_next):
myObject = MyClass(request)
response = await call_next(request)
return response
@app.get("/")
def read_root(arg:str):
data = myObject.build_data(arg)
return {"Hello": "World", "data": data}
可以吗?如何正确地做到这一点?
此外,如果无法创建新对象并将其传递给端点代码。也许我可以为对象创建某种“全局变量”?但它在多线程方面将如何工作?
app = FastAPI()
myObject = MyClass()
@app.middleware("http")
async def add_process_time_header(request: Request, call_next):
myObject.use_request(request)
response = await call_next(request)
return response
@app.get("/")
def read_root(arg:str):
data = myObject.build_data(arg)
return {"Hello": "World", "data": data}
这能正常工作还是会有一些多线程等细节?
MatsLindh 在评论中发布的答案效果很好。 我也在这里得到了完整的答案https://github.com/fastapi/fastapi/discussions/12250
import time
from fastapi import FastAPI, Request
app = FastAPI()
@app.middleware("http")
async def add_process_time_header(request: Request, call_next):
myObject = MyClass(request)
response = await call_next(request)
return response
@app.get("/")
def read_root(arg:str):
data = myObject.build_data(arg)
return {"Hello": "World", "data": data}