问题标签 [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.

0 投票
2 回答
2446 浏览

python - 将 FastAPI 中的请求记录到项目目录中的特定文件中


我正在为 FastAPI python 上的字典构建一个 API。
我是这个框架的新手,但我有点喜欢它,所以我想尝试一下。
作为要求的一部分,其中一个要求是将每个 HTTP 请求记录到我的项目中的特定文件 .log 文件中,而不是在服务器端。
我尝试使用中间件,但我无法弄清楚。所以如果你们对如何做到这一点有任何想法,请帮助我,因为我找不到关于这个主题的太多信息。

因此,在我的 API 端点(如 mysite.com/words)中生成的每个请求,我都必须将其记录在一个文件中,包括时间戳和其他一些不重要的信息,因为这是细节的一部分,但我想要的只是能够获取每个请求并将它们记录到文本文件中..

先感谢您..

0 投票
2 回答
1951 浏览

python - 将 pyyaml 与 FastAPI 一起使用时出现 CORS 错误

我正在尝试使用反应前端和 fastapi 后端创建一个简单的 Web 应用程序。Web 应用程序的一个功能是发送在前端收集并在后端处理的文件。我在后端有一个端点,如下所示:

我已确认此代码有效。我可以从前端发送一个文件,观察后端终端上打印出来的行,然后前端会收到一个带有 200 状态码和文件名的 http 响应。

当我尝试使用 pyyaml 库处理入站 yaml 文件时,问题就出现了。下面是一个不起作用的代码片段:

我得到错误:

所以这似乎是一个 CORS 问题......我目前对 FastAPI 的 CORS 政策如下所示:

我是否必须在我的 CORS 策略中添加一些内容以允许它使用 pyyaml?yaml.load()我不认为会是这种情况,因为处理仍然应该在同一个端点上完成(注意端点在同一个地方),但是 CORS 显然对使用该功能不满意。任何关于能够在我的后端加载 yaml 文件的建议将不胜感激。

根据 Rishabh Batra 的请求,我在此处添加了 OPTIONS 标头:在此处输入图像描述

0 投票
2 回答
4132 浏览

nginx - FastAPI 文档不适用于 nginx 入口控制器

我编写了一个在 Kubernetes pod 内运行 FastAPI 服务器的应用程序。与 pod 的外部通信通过单独的 pod 中的 nginx 入口控制器进行。我正在运行 nginx:1.17.0。

当它全部启动并运行时,我可以使用curl调用通过入口地址与应用服务器交互,并在我的浏览器中访问所有简单的 GET 路径以及地址/openapi.json。如果我在 Kubernetes 中使用应用服务的内部 ip,我也可以访问交互式文档页面。但是,尝试访问交互式文档页面(address/docs#/default/)会给我一个关于/openapi.json的错误。

在此处输入图像描述

由于curl调用按预期工作,我认为问题不一定在入口定义中,但使用应用程序的内部 ip 也可以正常工作,问题不应该在应用程序内部。
我在下面包含了入口定义文件。

编辑
这是 service.yaml 文件

由于该服务是我本地集群中的 ClusterIP,我可能可以直接使用它,但我还没有尝试过。当我卷曲时,我使用类似的命令

从本地集群外部。

这些是所有正在运行的服务:

在我的/etc/hosts文件中,我已将 10.0.0.1 (集群“外部”IP)连接到my-host.info

关于为什么会发生这种情况的任何想法?

0 投票
2 回答
9065 浏览

python - 有没有办法干净地杀死uvicorn?

有没有办法干净地杀死uvicorn?

即,如果它在终端的前台运行,我可以在其中键入 ^C。这会导致 uvivorn 进程终止,并清理所有工作进程。(即,他们走了。)

另一方面,如果 uvicorn 在没有终端的情况下在后台运行,那么我想不出一种方法来干净地杀死它。它似乎忽略了 SIGTERM、SIGINT 和 SIGHUP。我可以用 SIGKILL(即 -9)杀死它,但是工作进程仍然活着,我必须跟踪所有工作进程并将它们也杀死。这并不理想。

我在 Red Hat Enterprise Linux Server 7.3 (Maipo) 上将 uvicorn 与 CPython 3.7.4、uvivorn 版本 0.11.2 和 FastAPI 0.46.0 一起使用。

0 投票
2 回答
1787 浏览

python - .txt 文件的 POST 请求

我无法编写可以通过 POST 请求获取 .txt 文件的函数。

我有一个 .txt 文件,其中包含以下短语:Hello World!

服务器端:

客户端:

在运行命令 uvicorn main:app 并在客户端运行代码后,我得到下一个答案:

在客户端:{'detail': 'There was an error parsing the body'}

在服务器端:“POST /post_text_file HTTP/1.1”400 错误请求

0 投票
1 回答
1775 浏览

python - 如何在fastapi中获取多个表单输入字段作为字典?

我必须向带有 14 个输入字段的 fastapi 端点提交这样的表单,如下所示

我可以像下面这样一个一个地获取字段。

所有 14 个字段的方式相同。

但是有没有办法通过单个 pydantic 模式获取所有字段。像下面这样

0 投票
1 回答
631 浏览

dask - 异步计算 dask 数组块(Dask + FastAPI)

我正在构建一个 FastAPI 应用程序,它将为 Dask Array 的块提供服务。我想利用FastAPI 的异步功能以及Dask-distributed 的异步操作能力。下面是一个 mcve,它演示了我在应用程序的服务器端和客户端上要做什么:

服务器端:

客户端

在这个设置中,compute()调用_get_block是“阻塞的”,一次只计算一个块。我尝试了Client(asynchronous=True)client.compute(dask.compute(responses)) 的各种组合,但没有任何改进。是否可以await计算 dask 数组?

0 投票
2 回答
1655 浏览

python - Cookie 未在 starlette TestClient 上设置,请求通过 Python 请求发送

FastAPI 上的登录/注销功能在浏览器中工作,但我正在尝试为它编写单元测试。当我的应用设置 cookie 时,我可以看到响应确实发送了 cookie。当我通过 Python 请求收到它时,cookie 已从响应中删除,因此登录不起作用。

然后在浏览器中工作的服务器端:

所以在 BreakpointA() 处,就在发送响应之前,response.headers如下所示:

在 BreakpointB(),在我的测试客户端收到响应后,response.headers 和 response.cookies 如下所示:

我强烈怀疑这是因为域问题 - 但我该如何纠正呢?在我的 TestClient ( Starlette TestClient ) 中,我已经设置client.base_url = 'https://localhost'了 ,并且在我的端点中制作了我设置的 cookie DOMAIN=https://localhost。有人有解决这个问题的经验吗?

0 投票
1 回答
1610 浏览

python-3.x - Pydantic:如何使用关键字字段名称?

我正在尝试在 Pydantic 中为 API 请求建模。我必须为一个名为“from”的字段建模。由于“from”是 python 中的关键字,Pydantic 会抛出错误。

模型

Pydantic 抛出的错误

是否可以对这个“来自”字段进行建模?更改参数名称不是一种选择。

0 投票
2 回答
1157 浏览

python - 创建具有 ID 的对象并填充其他字段

我想只用 ID 构造一个 Pydantic 对象,然后根据 ID 填充其他字段。
我尝试了 2 种不同的方法,验证器和 post init。也没有工作,所以。

常用代码:

解决方案1:

解决方案2:

我觉得可行。我阅读了 Pydantic 和 FastApi 的文档,但找不到与此相关的任何内容。那么,如何仅使用 ID 构造对象,然后使用 DB 或其他对象填充字段?