问题标签 [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 中的请求记录到项目目录中的特定文件中
我正在为 FastAPI python 上的字典构建一个 API。
我是这个框架的新手,但我有点喜欢它,所以我想尝试一下。
作为要求的一部分,其中一个要求是将每个 HTTP 请求记录到我的项目中的特定文件 .log 文件中,而不是在服务器端。
我尝试使用中间件,但我无法弄清楚。所以如果你们对如何做到这一点有任何想法,请帮助我,因为我找不到关于这个主题的太多信息。
因此,在我的 API 端点(如 mysite.com/words)中生成的每个请求,我都必须将其记录在一个文件中,包括时间戳和其他一些不重要的信息,因为这是细节的一部分,但我想要的只是能够获取每个请求并将它们记录到文本文件中..
先感谢您..
python - 将 pyyaml 与 FastAPI 一起使用时出现 CORS 错误
我正在尝试使用反应前端和 fastapi 后端创建一个简单的 Web 应用程序。Web 应用程序的一个功能是发送在前端收集并在后端处理的文件。我在后端有一个端点,如下所示:
我已确认此代码有效。我可以从前端发送一个文件,观察后端终端上打印出来的行,然后前端会收到一个带有 200 状态码和文件名的 http 响应。
当我尝试使用 pyyaml 库处理入站 yaml 文件时,问题就出现了。下面是一个不起作用的代码片段:
我得到错误:
所以这似乎是一个 CORS 问题......我目前对 FastAPI 的 CORS 政策如下所示:
我是否必须在我的 CORS 策略中添加一些内容以允许它使用 pyyaml?yaml.load()
我不认为会是这种情况,因为处理仍然应该在同一个端点上完成(注意端点在同一个地方),但是 CORS 显然对使用该功能不满意。任何关于能够在我的后端加载 yaml 文件的建议将不胜感激。
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。
关于为什么会发生这种情况的任何想法?
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 一起使用。
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 错误请求
python - 如何在fastapi中获取多个表单输入字段作为字典?
我必须向带有 14 个输入字段的 fastapi 端点提交这样的表单,如下所示
我可以像下面这样一个一个地获取字段。
所有 14 个字段的方式相同。
但是有没有办法通过单个 pydantic 模式获取所有字段。像下面这样
dask - 异步计算 dask 数组块(Dask + FastAPI)
我正在构建一个 FastAPI 应用程序,它将为 Dask Array 的块提供服务。我想利用FastAPI 的异步功能以及Dask-distributed 的异步操作能力。下面是一个 mcve,它演示了我在应用程序的服务器端和客户端上要做什么:
服务器端:
客户端
在这个设置中,compute()
调用_get_block
是“阻塞的”,一次只计算一个块。我尝试了Client(asynchronous=True)
和client.compute(dask.compute(responses)
) 的各种组合,但没有任何改进。是否可以await
计算 dask 数组?
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
。有人有解决这个问题的经验吗?
python-3.x - Pydantic:如何使用关键字字段名称?
我正在尝试在 Pydantic 中为 API 请求建模。我必须为一个名为“from”的字段建模。由于“from”是 python 中的关键字,Pydantic 会抛出错误。
模型
Pydantic 抛出的错误
是否可以对这个“来自”字段进行建模?更改参数名称不是一种选择。
python - 创建具有 ID 的对象并填充其他字段
我想只用 ID 构造一个 Pydantic 对象,然后根据 ID 填充其他字段。
我尝试了 2 种不同的方法,验证器和 post init。也没有工作,所以。
常用代码:
解决方案1:
解决方案2:
我觉得可行。我阅读了 Pydantic 和 FastApi 的文档,但找不到与此相关的任何内容。那么,如何仅使用 ID 构造对象,然后使用 DB 或其他对象填充字段?