在 FastAPI 中请求上下文?
Request context in 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),它们将获得正确的请求。
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 应用程序中。
在 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),它们将获得正确的请求。
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 应用程序中。