从中间件到实际端点的FastAPI对象

问题描述 投票:0回答:1

我尝试为我的应用程序构建一个中间件。

我需要一种方法在我的中间件函数中创建一些对象,并且我想在下一个端点方法中访问该对象。请参阅我的代码示例。

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}

这能正常工作还是会有一些多线程等细节?

python-3.x fastapi fastapi-middleware
1个回答
0
投票

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}
© www.soinside.com 2019 - 2024. All rights reserved.