【问题标题】:FastAPI - How can I modify request from inside dependency?FastAPI - 如何从内部依赖项修改请求?
【发布时间】:2022-10-18 23:09:03
【问题描述】:
如何从依赖项内部修改请求?基本上我想在请求中添加一些信息(test_value),然后能够从视图函数(在我的情况下为root()函数)中获取它。
下面是一个简单的例子:
from fastapi import FastAPI, Depends, Request
app = FastAPI()
def test(request: Request):
request['test_value'] = 'test value'
@app.get("/", dependencies=[Depends(test)])
async def root(request: Request):
print(request.test_value)
return {"test": "test root path."}
【问题讨论】:
标签:
python
fastapi
starlette
【解决方案1】:
可以将任意额外的状态存储到request.state,如下图(Starlette的State类的相关实现可以在here找到):
from fastapi import FastAPI, Depends, Request
app = FastAPI()
def func(request: Request):
request.state.test = 'test value'
@app.get('/', dependencies=[Depends(func)])
def root(request: Request):
return request.state.test
如果您希望该状态(即上面的 test 属性)可以从任何请求/用户全局访问,您可能希望将其存储在应用程序实例中,如 this answer 以及 this 和 @ 中所述987654325@回答。