问题标签 [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.
python - 在中间件上下文中获取 starlette 请求正文
我有这样的中间件
因此,该行body = await request.body()
冻结了所有具有正文的请求,并且我从所有这些请求中获得了 504。在这种情况下,如何安全地阅读请求正文?我只想记录请求参数。
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'>
也许这是一个坏主意,我应该以不同的方式来做吗?非常感谢所有建议。谢谢你。
python - FastAPI 的应用挂载是如何工作的?
由于某些原因,我们选择了FastAPI,以便将其用作我们多模块生产的后端层。它的一个吸引人的特性是子应用程序,它可以帮助我们分离不同的模块,以使其更加模块化。但是我们担心官方文档中缺少一些可能的缺陷。有相当多的共同点——例如数据、服务等——我们需要通过插件、中间件和依赖注入在主模块和子模块之间共享它们。问题是:这个特性对于单独的模块是否足够好?所以:子应用程序是否从父应用程序继承中间件、插件和依赖注入?
感谢您分享您的经验。
python - FastAPI - 如何在响应中使用 HTTPException?
文档建议使用客户端错误引发 HTTPException,这很好。但是如何在遵循 HTTPException 模型的文档中显示这些特定错误?意思是带有“详细信息”键的字典。
以下内容不起作用,因为 HTTPException 不是 Pydantic 模型。
azure - Authlib 的 Azure 登录引发 invalid_claim: Invalid claim "iss"
我目前使用 Google 登录没有问题,我的 Starlette 应用程序使用 Authlib,但 Azure 在执行以下操作时抛出此无效声明“iss”错误:
拜托,任何帮助都会很棒。谷歌搜索它我没有找到任何东西。
完整的代码片段:
我认为问题可能在于使用这些:
问题应该是放置在 AZURE_CONF_URL 链接中的“颁发者”:“https://login.microsoftonline.com/{tenantid}/v2.0”。我见过人们有同样的问题。
python - FastAPI - 设置请求对象的 url 或路径
我有一个看起来像这样的函数:
在上面的函数中,我想根据情况改变请求的url,或者路径。我试过了request.__setattr__('url', 'sample_url')
,request.url.__ setattr__('path', 'sample_path')
如上所示,但由于AttributeError: can't set attribute error
. 我通读了 FastAPI 和 Starlette 文档,但在这种情况下找不到我需要的信息。任何帮助将不胜感激!
python - `return FileResponse(file_path)`后如何删除文件
我正在使用 FastAPI 接收图像,对其进行处理,然后将图像作为 FileResponse 返回。
但是返回的文件是临时文件,端点返回后需要删除。
退回后如何删除文件?
python - Uvicorn + Gunicorn + Starlette 服务时卡住,没有sigkill无法重启服务
我正在通过 gunicorn + uvicorn 在 VM 上提供模型。
它由 supervisord 自动启动,正在运行api.sh
。
api.sh
包含:
无需过多介绍api.py
,它包含以下主要部分:
发生的情况是,在 api 启动几天后,我开始收到这些错误:
在 supervisord 中重新启动 api 什么也没做,我得到与上面相同的消息。我发现可行的唯一方法是:
- 在 supervisord 中停止 api
- 查看 4080 端口(一个
python3.8
进程)上运行的是哪个 pid:sudo netstat -tulpn | grep LISTEN
- 杀死它运行
kill -9 [PID]
- 重复步骤 2-3 1-2 次,直到没有任何东西占用 4080 端口
- 在 supervisord 中启动 api
你有什么想法如何解决这个问题吗?
python - 无法配置 Starlette .env 文件
我正在尝试为我的项目设置 .env 文件。但这似乎不正确。
我将 .env 文件存储在与 config.py 文件相同的文件夹中,如下所示。
我的 config.py 文件中的代码:
.env 文件中的数据:
但我得到的结果是:
我不知道为什么它得到了None对象。我该如何解决?
我从run.py文件运行我的项目。
run.py文件中的代码:
python - FastAPI中音频流的Websockets桥接器
客观的
我的目标是使用音频流。从逻辑上讲,这是我的目标:
- 音频流来自 WebSocket A(
FastAPI
端点) - 音频流被桥接到不同的 WebSocket,B,它将返回一个 JSON(Rev-ai的 WebSocket)
- Json 结果通过 WebSocket A 实时发回。因此,虽然音频流仍在进来。
可能的解决方案
为了解决这个问题,我有很多想法,但最终我一直在尝试过渡WebSocket A
到WebSocket 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 运行它,执行一些额外的处理,并将结果发回。