问题标签 [quart]

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 投票
1 回答
77 浏览

python - Python Quart 无法正确呈现 HTML

我正在使用 Python Quart(作为蓝图)渲染页面:

问题是错误消息没有正确呈现 - 它正在呈现

  • 没有红色
  • 位置不正确
  • 在 Chrome 中使用开发者工具它没有显示样式

如果我在 Chrome 中本地运行与文件完全相同的页面,它可以正常工作,是否需要一些额外的代码?我认为 HTML 是正确的。

html:

CSS:

0 投票
1 回答
85 浏览

python - 不能在 quart 处理程序中使用请求和产量

我正在尝试使用异步生成器和 quart 流式传输更大查询的结果。request但是,在使用HTTP 查询的参数时,我陷入了从异步函数中产生的问题

从结果开始hypercorn module:app并调用它curl localhost:8000/?arg=monkey

0 投票
1 回答
60 浏览

python - Python 运行旧函数

我有一个PY3使用Quart. 我用hypercorn. 我已经部署了一个新版本,但是当我发布请求时,我得到了旧的响应。

我做了一个简单的测试,并在我的一个路由中写了一个静态响应来查看变化。没有。我已经杀死了所有进程并重新启动了它们。我已经重新启动了服务器。注意到。

python3 app.py使用, Same启动应用程序。我错过了什么?

这是一个代码示例:

应用程序.py

测试.py

我改变了函数的函数结果get_user_t。部署后,我查看并更改了代码,但我一直得到旧的结果。我清理了所有pycache文件夹,构建文件夹和 egg 文件并运行sudo pip3 install -e .

为了测试发生了什么,我将get_user_t路线更改为:

我仍然得到旧的结果。

也清除了所有

0 投票
1 回答
136 浏览

werkzeug - 是否有像 werkzeug 的 ProxyFix 这样的库来修复 request.remote_addr 但适用于 Quart / Hypercorn ASGI 服务器?

我正在尝试在 NGINX 反向代理后面运行 Quart 应用程序,但需要能够使用request.remote_addr来确定客户端连接的 IP 地址。使用 Flask 执行此操作时,我一直在ProxyFix这里使用 werkzeug 包: https ://werkzeug.palletsprojects.com/en/2.0.x/middleware/proxy_fix/

我的 nginx 配置如下所示:

然后在 python 代码中,我使用这条路线进行测试:

当请求通过时,他们总是说 remote_addr is 127.0.0.1,因为那是 nginx 实例的 ip。

任何有关如何使用 nginx+hypercorn+quart 实现此功能的指针将不胜感激。

0 投票
1 回答
197 浏览

python - 将带有 websockets 的 Quart 项目从 asyncio 迁移到 trio

我正在尝试将我的 asyncio 项目转换为 trio。我知道我必须使用内存通道而不是队列,但由于某种原因,我没有得到我期望的结果。

我的主要问题是,当我运行两个客户端时,如果第二个客户端离开,第一个客户端不会收到通知(从服务器广播“部分”消息会引发错误)。另一个问题是,有时客户端在打开 websocket 时会立即退出。当我使用 asyncio 时,一切正常。

这是我在第二个客户端断开连接时得到的堆栈跟踪:

这是代码(设置TRIOFalse使用 asyncio):

服务器.py

客户端.py

编辑:我使用 anyio 进行了测试,虽然 anyio+trio 的行为相同,但 anyio+asyncio 重现了问题(无任何例外)。所以我猜它来自队列替换。

0 投票
0 回答
606 浏览

python - 如何在 django 中通过 discord.py 和 discord-ext-ipc 使用进程间通信 (IPC)/websocket

我目前正在discord-ext-ipc用作 discord.py 的进程间通信 (IPC) 扩展,并将其与quart-discord. Quart 是 Fl​​ask 的 asyncio 重新实现,可以原生地提供 WebSockets 和其他异步的东西。我可以很容易地将 Web 前端用作仪表板来与公会中的不和谐用户进行交互。做一些有趣的事情,比如在仪表板上使用不和谐角色模型作为权限模型。

最近我偶然发现了 django,并迷上了这个强大的框架。作为一个学习项目,我想将当前的工作项目移植到 django 中,但我偶然发现了一些僵局。

首先是使用discord-ext-ipcand的工作示例quart-discord

僵尸软件

主文件

列表.html

伸手去:http://localhost:5001/dashboard 给我这个机器人加入的公会ID列表。据我了解,调用会await ipc_client.request("get_guild_ids")发送一个 websocket 请求IPC Server <,并立即收到答案IPC Server >

现在研究 Django

上面的bot.py仍在运行。在正常情况下,Django 是同步运行的,你不能想出一个async def函数。所以我们必须使用 import 切换到异步from asgiref.sync import async_to_sync, sync_to_async。我正在使用@login_required装饰器,根据this,我必须将@login_required装饰器包装到@sync_to_asyncand@async_to_sync中,否则会出现此错误:

那么现在的问题是什么?这First request就像一个魅力,我得到了我所期待的结果。刷新网页后,我收到Second request. 第三次刷新后,错误又变了一次,见:Third request. 我的猜测是,Django 发出请求并以错误的方式关闭连接,并且在刷新后不会重新打开它。由于 StatReloader 重新启动 Django 服务器后,它再次工作,一次,直到再次重新启动,依此类推。

对于这种特殊情况,我是否必须使用渠道/消费者,还是有其他方法?如果 Channels 是“唯一的”解决方案,我将如何抛出 websocket 请求。我只是在 websocket 连接上失败了,bot.py所以我可以发送命令{'endpoint': 'get_guild_ids', 'data': {}, 'headers': {'Authorisation': 'SUPER-MEGA-SECRET-KEY'}}与之交互。

第一个请求

bot.py 响应

Django 响应

第二个请求

bot.py 响应

姜戈回应:

第三次请求

bot.py 响应

No IPC request and response traceable

Django 响应

视图.py

网址.py

更新:

这里还有一些调试。首先,我们看到一个干净的请求,并返回了正确的回复。第一次刷新后,出现 RuntimeError,因为旧任务仍然等待结束(?)。

0 投票
1 回答
57 浏览

python - 无法在 quart 生命周期中访问不和谐机器人实例

我对事件循环感到困惑,这可能是一个常见问题,因为似乎人们正在使用 discord.py 和 quart。我正在尝试整合 discord.py、quart 和 celery。

我有一个看起来像这样的 manage.py。它暴露了 app 和 celery,它们分别被 hypercorn 和 celery 使用。我正在尝试让 celery 使用 discord.py 实例

在 ./backend/init.py 我定义了 create_celery() 和 create_app()

当我调用 asyncio.get_running_loop() 时,我没有运行事件循环

如何从 celery 的上下文中访问 app.discord_bot?

0 投票
0 回答
90 浏览

python - 使用 Celery 在 Quart 中传递应用程序上下文

我想将应用程序上下文从 Quart 传递到 Celery 应用程序。我尝试将Flask 提供的同步代码示例改编为 Quart 的异步形式。

但是,在运行此代码片段后,asyncio.run()在单独的函数中执行类似运行的操作会给出 RuntimeError,因为已经有一个正在运行的循环。

从 Quart传递app_context到 Celery 的可能方法是什么?

0 投票
0 回答
55 浏览

python - Python Quart 服务器和 JS SocketIO 客户端是否兼容?

在我当前的服务器上,large blocks of calculations当我收到 socketio 事件时。(服务器正在使用Flask+ flask-socketio。)

我正在将服务器从本地版本服务移动only one user云版本服务company-wise

我测试了使用多个浏览器选项卡在短时间内发送请求的并发容忍度。根据测试结果,和目前提供的默认并发似乎还不够。flask-socketioeventlet

经过一番调查,我想使用asyncio,但最终没有办法将它与Flask以及一起实现flask-socketio。我发现Quart这是一个更好的选择,它可以同时支持asyncio两者websocket

现在的好处是我不必修改任何 Flask API,但对于 websocket,事情就不太清楚了:

我是否必须将所有原始 socketio 服务器端事件侦听器修改routes为在 Quart 中使用的 websocket?我可以将 python-socketio 与 Quart 一起使用吗?我至少可以保留客户端socketio代码吗?-- 他们使用基于事件的 websocket 请求,而 Quart 内置 websocket 服务器似乎只接收基于 url(或基于路由)的 websocket 请求。

0 投票
1 回答
106 浏览

python - Quart/Flask render_template 返回紧凑的 json

我正在使用 Quart(本质上是 Flask for HTTP/2)来提供一些 JSON 内容。JSON 内容以漂亮的打印格式驻留在 templates/ 目录中,例如

例子.json

如果我只是return render_template('example.json'),它将保留原始文件中的所有空格。我想返回一个紧凑的形式,即

有没有一种好方法可以做到这一点(理想情况下也可以将内容类型设置为应用程序/json)。到目前为止,我想出的是:

但它不能很好地处理值中的空格(这个版本完全删除了它们)。Quart中的jsonify函数自动将Content-type设置为application/json,但是对render_template返回的字符串似乎并没有很好的操作,除非我用错了。