【问题标题】:Access fastapi.Request object without router method无路由方法访问 fastapi.Request 对象
【发布时间】:2022-06-17 16:10:11
【问题描述】:

我有一个 FastAPI app,在应用启动时,我为它创建了一个 State,如下所示:

app.state.player["id"] = Player()

现在我想在需要时访问这个player 状态。访问此状态的唯一方法是通过 fastapi.Request 对象,如下所示:

request.app.state.player["id"]

我试过了:

def _return_player(request: Request):
    return request.app.state.player["id"]

async def process_new_player(player: Player = Depends(_return_player)):
    await player.play()

但显然fastapi.Depends 只能在路由器方法中使用。

然后我想做这样的事情:

async def process_new_player():
    player = request.app.state.player["id"]
    await player.play()

但我还是不确定如何获得fastapi.Request 的值。不,process_new_player 方法一开始并没有从任何路由器启动(如果是这种情况,我可以将fastapi.Request 对象递归地传递到这里)。

如何在process_new_player 方法中访问request.app.state.player["id"] 的值?

我已经知道 starlette-context 库,但我想要一个没有第三方的解决方案和一个更简单的解决方案。

谢谢!

【问题讨论】:

  • 如果这是要在 FastAPI 上下文之外使用的应用程序范围的变量,那么首先将其附加到(然后尝试在外部使用)FastAPI 对象的原因是什么地方?你怎么打电话给process_new_player? (即,是否有任何理由不在应用程序启动时调用它,并在其中附加状态变量?)很难理解用例与“只是”在 FastAPI 应用程序对象之外拥有一个状态容器相比。 /跨度>
  • 我认为我只能通过Request 对象访问State 对象是错误的。我刚刚通过app.state.player["id"] 访问了player 状态。你不需要DependsRequest

标签: fastapi starlette


猜你喜欢
  • 1970-01-01
  • 2013-05-03
  • 1970-01-01
  • 2020-07-31
  • 2013-03-27
  • 1970-01-01
  • 2021-04-01
  • 1970-01-01
  • 2016-02-03
相关资源
最近更新 更多