问题标签 [fastapi]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - FastAPI 中的中间件,用于为每个请求生成 UUID 并发送到日志
我正在寻找Fast API中的中间件,用于为每个请求生成UUID并将其发送到logs。
我需要将 uuid 发送到 X-Request-ID 标头,我将使用 python 日志库从那里获取它,例如,
我需要一个中间件中的所有这些。Fast API 中是否已经存在类似的中间件?
我需要在中间件中生成 uuid,例如,
但无法做到这一点。我收到错误,例如 gen_uuid 接受 2 个参数但传递 0 个参数
python - 是否可以将路径传递到 fastapi 端点?
我正在尝试使用 fastapi 创建一个遍历 api 的文件夹。假设我有这样的终点:
如果我对浏览器进行操作并调用“URL:PORT/path/path”
它返回“路径”,很简单。但是,如果我尝试“URL:PORT/path/path/path”,代码甚至不会到达记录器。我想这是有道理的,因为 API 不存在那个端点。但它确实存在于我的服务器上。我已经想出了其他方法来做到这一点,即将路径作为参数数组传递并使用 / 分隔符在代码中重新构建,但是如果我可以通过 url 中的路径移动,则在 url 中传递参数感觉有点笨拙我的服务器,那将是理想的。这是可行的吗?
谢谢。
python - 在 FastAPI 中使用多文件应用程序的配置/依赖关系
我试图弄清楚如何使配置/单例可用于不同的模块。也许有一种我还不知道的标准 Python 方法。所以我创建了一个包含所有应用程序配置的配置单例,并希望与所有模块“共享”它。相同的用例将适用于共享数据库连接。
主文件
api/collection.py
python - 需要使用 FastAPI 立即发送响应状态代码,同时在后台保持作业同步
我有一个非常耗时的任务(图像处理),它从给 FastAPI 端点的请求中接收一些输入数据。为了让呼叫者保持响应,我需要发送一个即时响应消息,如“ok”以及 201 状态代码(后者可选)。
到目前为止,我一直在使用这个:
每个main_process
任务从 S3 中的存储桶下载图像,然后进行一些处理。上面显示的解决方案可以正常工作,直到达到 10 个异步处理的图像(给定 async def)然后它崩溃。
我也尝试过增加一些 gunicorn 参数,比如max-requests
增加到 100,如下所示:
这给了我更多处理空间(另外 20 张图像),但它还是崩溃了。
我也考虑过使用 Celery 或一些分布式任务队列解决方案,但我想让事情尽可能简单。
由于异步行为并不重要,但即时响应很重要,是否可以切换到同步解决方案但立即获得“ok”响应?
python - 使用 FastAPI 读取正文 JSON 列表
HTTP PUT 请求的主体是一个 JSON 列表 - 像这样:
我无法改变这一点。(如果根是 JSON 对象而不是列表,则没有问题。)
使用 FastAPI 我似乎无法以正常方式访问此内容:
我找到了以下解决方法,这似乎是一个非常丑陋的 hack:
这肯定不是实现这一目标的“批准”方式。我已经浏览了 FastAPI 和 pydantic 的文档。我错过了什么?
python - FastAPI - 模拟路径功能没有效果
我有一个简单的FastAPI应用程序,我正在尝试pytest
为它创建测试。
我的目标是测试应用程序在出现不同错误时的行为方式。
我的应用中有一个简单的健康检查路线:
现在在我的 pytest 模块中,我试图修补上面的函数,以便它引发不同的错误。我正在使用unittest.mock
,但我的行为很奇怪。
尽管在测试中调用了完全相同的函数,但当我到达端点时,API 测试客户端仍然调用原始函数。
mock.patch
测试中不直接调用函数,为什么不能正常工作?
或者也许我应该以不同的方式解决我的问题?
reactjs - fastAPI中的异步心跳
我正在重构一个项目,从带有 flask-socketio 的 Flask 迁移到带有异步的 FastAPI。造成这种情况的两个主要原因是停止使用线程来做异步可以做的事情,以及与其他开发人员保持一致。客户端是 React with Redux。
试图在服务器端设置一个基本的“心跳”,每秒向所有客户端发送一个 0/1 信号。似乎无法弄清楚如何做到这一点。我曾尝试使用 StreamingResponse() 方法,但它只是等待给定的函数完成,然后发送一整堆 1 和 0。
关于如何使用 FastAPI 设置“始终运行”功能以实时流式传输简单数据的任何想法?我有 3 个需要执行此操作的功能。
我也研究了flask-sse,但它需要redis,我宁愿避免。
python - 我们可以使用不同的数据库来运行 pytest 吗?
所以我使用 FastAPI 来创建我的应用程序服务器,其中有一些 url,我对数据库进行了一些粗略的操作。例如:当我点击一个/createuser/
带有 json 正文的 url 时,它会在 db 中插入一条记录。所以我正在使用 pytest 来测试这些东西,但 pytest 似乎使用了我的 FastAPI 应用程序正在使用的相同数据库。我想创建一个模拟数据库,以便它使用另一个数据库来运行测试。我也用过pytest.fixtures
,但我想有什么问题。请帮忙解决这个问题。我也使用 postgres 作为我的数据库。
- 创建 FastAPI 应用程序的主应用程序
- 我的数据库类,其中定义了 db 连接
- 我的 CRUD 操作课
- 我的测试类(我希望它使用模拟数据库)
以下测试失败,因为它总是让用户出现在我当前的数据库中。
谢谢你。
python - 使用 Pydantic 的 FastApi 中的动态体
我想在 FastApi 上有一个动态的强制性机构。
我解释 :
在这里,我的 body 是在 Parameters 类中手动定义的,有两个属性,平台和国家。未来,这些属性将来自一个配置文件,并且会有两个以上的属性。所以我需要动态地自动创建它们。
例如,在配置文件中,我可以:
在这种情况下,我怎么能在正文中拥有可变数量的参数?我应该找到一种方法为我的参数类提供可变数量的属性吗?
docker - Gunicorn/Uvicorn 工作人员在 AWS Fargate 上超时
我尝试在 AWS Fargate 上部署我的 FastAPI 应用程序,并在其前面使用应用程序负载均衡器。应用程序调用 AWS Aurora。我的堆栈如下
- Python 3.7.4
- 优维康 0.11.3
- 独角兽 19.9.0
- 快速API 0.53.2
- 异步PG 0.20.1
我的容器在本地或 EC2 实例上部署时运行良好,但在 Fargate 上部署时工作人员在引导期间超时。日志没有给我任何线索什么是错的(见下文)。
我试图克服这个问题的事情:
- 增加 Fargate 任务的内存
- 放宽安全组设置
- 增加 gunicorn 超时值
它没有任何效果。
但是,当尝试部署准系统 FastAPI 应用程序(只有一个根路由,没有依赖项)时,应用程序设法启动,我可以通过负载均衡器访问它。添加自定义路由后,就会出现问题。
我还需要什么其他选项来调试它?如果 guincorn 无法启动我的工人,有没有办法记录问题?