python - 在 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 应用程序中。
推荐阅读
- date - 如何在 Pervasive SQL 中读取日期?
- ios - 在 Swift 中,如果我有一个 UITabBarController,我如何在切换标签之前 popToRootViewController 我当前的 navigationController?
- computer-science - 在客户端或服务器中执行代码,poly-something 或其他?
- ios - Cocoapods:不能使用模块“xxx”作为类型
- sql - SQL 交叉表选择问题
- mysql - SQL:在同一个表中查找重复计数、添加的新值和删除的值(动态)
- firebase - 在实时数据库中存储 Firebase 云消息
- java - 如何使用 Gradle 构建库 Jar
- protocol-buffers - 如何停止使用 protobuf3 打印错误消息“无法解析类型的消息,因为它缺少必填字段”
- ruby - 在大型数组中查找重复项的快速方法