【问题标题】: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@回答。

    【讨论】:

    • 完美,这真的为我节省了很多时间。
    猜你喜欢
    • 2020-11-08
    • 1970-01-01
    • 2010-09-15
    • 2023-02-04
    • 1970-01-01
    • 2020-02-15
    • 1970-01-01
    • 2018-04-12
    • 1970-01-01
    相关资源
    最近更新 更多