问题标签 [starlette]

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 投票
5 回答
5753 浏览

python - 在中间件上下文中获取 starlette 请求正文

我有这样的中间件

因此,该行body = await request.body()冻结了所有具有正文的请求,并且我从所有这些请求中获得了 504。在这种情况下,如何安全地阅读请求正文?我只想记录请求参数。

0 投票
3 回答
4888 浏览

python - FastAPI:如何访问依赖项中的 APIRoute 对象

我正在使用 FastAPI,主应用程序正在使用include_router它向 fastAPI 应用程序添加额外的路由。

我想在所有路线上添加通用验证。我在文档中发现,您可以通过在包含路由器时使用依赖项来实现这一点。

https://fastapi.tiangolo.com/tutorial/bigger-applications/#the-main-fastapi

这有效,并被所有 http 请求执行。到目前为止一切都很好!

现在,我想知道在这个通用验证函数内部(在所有路由中使用 Depends() 注入)哪个路由正在调用该函数。

我找到了一种访问实际请求的方法(使用 fastapi.routing.Request 作为函数的输入参数),但我想访问函数或 APIRoute 本身的名称

RuntimeError: no validator found for <class 'fastapi.routing.APIRoute'>

也许这是一个坏主意,我应该以不同的方式来做吗?非常感谢所有建议。谢谢你。

0 投票
1 回答
2597 浏览

python - FastAPI 的应用挂载是如何工作的?

由于某些原因,我们选择了FastAPI,以便将其用作我们多模块生产的后端层。它的一个吸引人的特性是子应用程序,它可以帮助我们分离不同的模块,以使其更加模块化。但是我们担心官方文档中缺少一些可能的缺陷。有相当多的共同点——例如数据、服务等——我们需要通过插件、中间件和依赖注入在主模块和子模块之间共享它们。问题是:这个特性对于单独的模块是否足够好?所以:子应用程序是否从父应用程序继承中间件、插件和依赖注入?

感谢您分享您的经验。

官方文档中的示例代码

0 投票
1 回答
7405 浏览

python - FastAPI - 如何在响应中使用 HTTPException?

文档建议使用客户端错误引发 HTTPException,这很好。但是如何在遵循 HTTPException 模型的文档中显示这些特定错误?意思是带有“详细信息”键的字典。

以下内容不起作用,因为 HTTPException 不是 Pydantic 模型。

0 投票
1 回答
177 浏览

azure - Authlib 的 Azure 登录引发 invalid_claim: Invalid claim "iss"

我目前使用 Google 登录没有问题,我的 Starlette 应用程序使用 Authlib,但 Azure 在执行以下操作时抛出此无效声明“iss”错误:

拜托,任何帮助都会很棒。谷歌搜索它我没有找到任何东西。

完整的代码片段:

我认为问题可能在于使用这些:

问题应该是放置在 AZURE_CONF_URL 链接中的“颁发者”:“https://login.microsoftonline.com/{tenantid}/v2.0”。我见过人们有同样的问题。

0 投票
1 回答
3239 浏览

python - FastAPI - 设置请求对象的 url 或路径

我有一个看起来像这样的函数:

在上面的函数中,我想根据情况改变请求的url,或者路径。我试过了request.__setattr__('url', 'sample_url')request.url.__ setattr__('path', 'sample_path')如上所示,但由于AttributeError: can't set attribute error. 我通读了 FastAPI 和 Starlette 文档,但在这种情况下找不到我需要的信息。任何帮助将不胜感激!

0 投票
4 回答
2352 浏览

python - `return FileResponse(file_path)`后如何删除文件

我正在使用 FastAPI 接收图像,对其进行处理,然后将图像作为 FileResponse 返回。

但是返回的文件是临时文件,端点返回后需要删除。

退回后如何删除文件?

0 投票
1 回答
849 浏览

python - Uvicorn + Gunicorn + Starlette 服务时卡住,没有sigkill无法重启服务

我正在通过 gunicorn + uvicorn 在 VM 上提供模型。

它由 supervisord 自动启动,正在运行api.sh

api.sh包含:

无需过多介绍api.py,它包含以下主要部分:

发生的情况是,在 api 启动几天后,我开始收到这些错误:

在 supervisord 中重新启动 api 什么也没做,我得到与上面相同的消息。我发现可行的唯一方法是:

  1. 在 supervisord 中停止 api
  2. 查看 4080 端口(一个python3.8进程)上运行的是哪个 pid:sudo netstat -tulpn | grep LISTEN
  3. 杀死它运行kill -9 [PID]
  4. 重复步骤 2-3 1-2 次,直到没有任何东西占用 4080 端口
  5. 在 supervisord 中启动 api

你有什么想法如何解决这个问题吗?

0 投票
3 回答
1832 浏览

python - 无法配置 Starlette .env 文件

我正在尝试为我的项目设置 .env 文件。但这似乎不正确。

我将 .env 文件存储在与 config.py 文件相同的文件夹中,如下所示。

我的 config.py 文件中的代码:

.env 文件中的数据:

但我得到的结果是:

我不知道为什么它得到了None对象。我该如何解决?

我从run.py文件运行我的项目。

run.py文件中的代码:

0 投票
1 回答
2696 浏览

python - FastAPI中音频流的Websockets桥接器

客观的

我的目标是使用音频流。从逻辑上讲,这是我的目标:

  1. 音频流来自 WebSocket A(FastAPI端点)
  2. 音频流被桥接到不同的 WebSocket,B,它将返回一个 JSON(Rev-ai的 WebSocket)
  3. Json 结果通过 WebSocket A 实时发回。因此,虽然音频流仍在进来。

可能的解决方案

为了解决这个问题,我有很多想法,但最终我一直在尝试过渡WebSocket AWebSocket B. 到目前为止,我的尝试涉及一个ConnectionManager类,其中包含一个Queue.queue. 音频流的块被添加到这个队列中,这样我们就不会直接从WebSocket A.

ConnectionManager还包含一个生成器方法,用于从队列中产生所有值。

我的 FastAPI 实现使用websocket A如下:

在此摄取的同时,我希望有一个任务将我们的音频流桥接到WebSocket B,并将获得的值发送到WebSocket A。可以通过上述generator方法来消费音频流。

由于 WebSocket B 如何使用消息,因此生成器方法是必要的,如 Rev-ai 的示例所示

这是最大的挑战之一,因为我们需要将数据消耗到生成器中并实时获取结果。

最新尝试

我一直在尝试我的运气asyncio;据我了解,一种可能性是创建一个在后台运行的协程。我在这方面没有成功,但听起来很有希望。

我曾考虑通过FastAPI启动事件来触发它,但我无法实现并发。我尝试使用event_loops,但它给了我一个nested event loop相关的错误。

警告

如果您的洞察力认为 FastAPI 是可选的,在某种程度上 WebSocket A 也是如此。归根结底,最终目标是通过我们自己的 API 端点接收音频流,通过 Rev.ai 的 WebSocket 运行它,执行一些额外的处理,并将结果发回。