问题标签 [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.
python - Python Quart 无法正确呈现 HTML
我正在使用 Python Quart(作为蓝图)渲染页面:
问题是错误消息没有正确呈现 - 它正在呈现
- 没有红色
- 位置不正确
- 在 Chrome 中使用开发者工具它没有显示样式
如果我在 Chrome 中本地运行与文件完全相同的页面,它可以正常工作,是否需要一些额外的代码?我认为 HTML 是正确的。
html:
CSS:
python - 不能在 quart 处理程序中使用请求和产量
我正在尝试使用异步生成器和 quart 流式传输更大查询的结果。request
但是,在使用HTTP 查询的参数时,我陷入了从异步函数中产生的问题
从结果开始hypercorn module:app
并调用它curl localhost:8000/?arg=monkey
python - Python 运行旧函数
我有一个PY3
使用Quart
. 我用hypercorn
. 我已经部署了一个新版本,但是当我发布请求时,我得到了旧的响应。
我做了一个简单的测试,并在我的一个路由中写了一个静态响应来查看变化。没有。我已经杀死了所有进程并重新启动了它们。我已经重新启动了服务器。注意到。
python3 app.py
使用, Same启动应用程序。我错过了什么?
这是一个代码示例:
应用程序.py
测试.py
我改变了函数的函数结果get_user_t
。部署后,我查看并更改了代码,但我一直得到旧的结果。我清理了所有pycache文件夹,构建文件夹和 egg 文件并运行sudo pip3 install -e .
为了测试发生了什么,我将get_user_t
路线更改为:
我仍然得到旧的结果。
也清除了所有
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 实现此功能的指针将不胜感激。
python - 将带有 websockets 的 Quart 项目从 asyncio 迁移到 trio
我正在尝试将我的 asyncio 项目转换为 trio。我知道我必须使用内存通道而不是队列,但由于某种原因,我没有得到我期望的结果。
我的主要问题是,当我运行两个客户端时,如果第二个客户端离开,第一个客户端不会收到通知(从服务器广播“部分”消息会引发错误)。另一个问题是,有时客户端在打开 websocket 时会立即退出。当我使用 asyncio 时,一切正常。
这是我在第二个客户端断开连接时得到的堆栈跟踪:
这是代码(设置TRIO
为False
使用 asyncio):
服务器.py
客户端.py
编辑:我使用 anyio 进行了测试,虽然 anyio+trio 的行为相同,但 anyio+asyncio 重现了问题(无任何例外)。所以我猜它来自队列替换。
python - 如何在 django 中通过 discord.py 和 discord-ext-ipc 使用进程间通信 (IPC)/websocket
我目前正在discord-ext-ipc
用作 discord.py 的进程间通信 (IPC) 扩展,并将其与quart-discord
. Quart 是 Flask 的 asyncio 重新实现,可以原生地提供 WebSockets 和其他异步的东西。我可以很容易地将 Web 前端用作仪表板来与公会中的不和谐用户进行交互。做一些有趣的事情,比如在仪表板上使用不和谐角色模型作为权限模型。
最近我偶然发现了 django,并迷上了这个强大的框架。作为一个学习项目,我想将当前的工作项目移植到 django 中,但我偶然发现了一些僵局。
首先是使用discord-ext-ipc
and的工作示例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_async
and@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,因为旧任务仍然等待结束(?)。
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?
python - 使用 Celery 在 Quart 中传递应用程序上下文
我想将应用程序上下文从 Quart 传递到 Celery 应用程序。我尝试将Flask 提供的同步代码示例改编为 Quart 的异步形式。
但是,在运行此代码片段后,asyncio.run()
在单独的函数中执行类似运行的操作会给出 RuntimeError,因为已经有一个正在运行的循环。
从 Quart传递app_context
到 Celery 的可能方法是什么?
python - Python Quart 服务器和 JS SocketIO 客户端是否兼容?
在我当前的服务器上,large blocks of calculations
当我收到 socketio 事件时。(服务器正在使用Flask
+ flask-socketio
。)
我正在将服务器从本地版本服务移动only one user
到云版本服务company-wise
。
我测试了使用多个浏览器选项卡在短时间内发送请求的并发容忍度。根据测试结果,和目前提供的默认并发似乎还不够。flask-socketio
eventlet
经过一番调查,我想使用asyncio
,但最终没有办法将它与Flask
以及一起实现flask-socketio
。我发现Quart
这是一个更好的选择,它可以同时支持asyncio
两者websocket
。
现在的好处是我不必修改任何 Flask API,但对于 websocket,事情就不太清楚了:
我是否必须将所有原始 socketio 服务器端事件侦听器修改routes
为在 Quart 中使用的 websocket?我可以将 python-socketio 与 Quart 一起使用吗?我至少可以保留客户端socketio代码吗?-- 他们使用基于事件的 websocket 请求,而 Quart 内置 websocket 服务器似乎只接收基于 url(或基于路由)的 websocket 请求。
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返回的字符串似乎并没有很好的操作,除非我用错了。