Mik*_*zak 4 python starlette fastapi
如何从依赖项内部修改请求?基本上我想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."}
Run Code Online (Sandbox Code Playgroud)
您可以将任意额外状态存储到request.state,并使用Request端点内的对象来检索状态(Starlette 方法和类的相关实现可以分别在此处和此处State找到):
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
Run Code Online (Sandbox Code Playgroud)
如果您希望该状态(即test上面的属性)可以从任何请求/用户全局访问,您可能希望将其存储在应用程序实例上,如本答案以及本答案中所述。
dependencies=[Depends(test)]您可以直接使用依赖项注入,通过将(在本例中)定义为端点test参数并使用Depends. 然后,您可以让依赖函数返回该属性。但是,使用此选项,如果您必须为整个应用程序/路由器定义全局依赖项,则必须对应用程序/路由器中的每个端点执行此操作,如此处和此处所示。
from fastapi import FastAPI, Depends, Request
app = FastAPI()
def func(request: Request):
return 'test value'
@app.get('/')
def root(request: Request, test: str = Depends(func)):
return test
Run Code Online (Sandbox Code Playgroud)