首页 > 解决方案 > 在 FastAPI 中请求上下文?

问题描述

Flask中,请求可用于调用路径中的任何函数,因此不必显式传递。

FastAPI中有类似的东西吗?

基本上,我想在同一个应用程序中允许“真实”或“虚拟”请求,其中虚拟不会实际执行某些操作,只是发出它们(是的,我知道在堆栈中检查它是不好,但我无法控制所有代码)。

假设我有

@app.post("/someurl")
def my_response():
  func1()

def func1():
  func2()

def func2():
  # access some part of the request

即我不需要将请求作为参数一直传递到func2。

在 Flask 中,我只是直接访问请求,但我不知道如何在 FastAPI 中进行。例如,在 Flask 我可以做

def func2():
 x = request.my_variable
 # do somethinh with x

此处的请求是特定 URL 调用的本地请求,因此如果 func2 有两个并发执行(使用任何 URL),它们将获得正确的请求。

标签: pythonfastapi

解决方案


FastAPI 为此使用了 Starlette。

(来自文档的代码)

from fastapi import FastAPI, Request


app = FastAPI()


@app.get("/items/{item_id}")

def read_root(item_id: str, request: Request):

    client_host = request.client.host

    return {"client_host": client_host, "item_id": item_id}

参考:

直接使用请求

编辑:

我不认为这是 FastAPI 开箱即用的东西。Starlette 似乎也没有,但是有这个项目将上下文中间件添加到 Starlette,它应该很容易集成到 FastAPI 应用程序中。

星光语境


推荐阅读