Python ASGI Web应用的浏览器热重载
项目描述
arel
为Python ASGI Web应用提供浏览器热重载。
概述
这是用来做什么的?
arel
可用于实现仅用于开发的针对非Python文件的即时重载,这些文件在每个请求中都不是从磁盘读取的。这可能包括HTML模板、GraphQL模式、缓存的渲染Markdown内容等。
它是如何工作的?
arel
监视一组文件的变化。当文件发生变化时,arel
通过WebSocket通知浏览器,并触发注入的客户端脚本进行页面重载。您可以为任何额外的服务器端操作注册自己的重载钩子,例如重新加载缓存内容或重新初始化其他服务器端资源。
安装
pip install 'arel==0.3.*'
快速入门
有关使用Starlette的示例,请参阅示例部分。
虽然使用arel
设置热重载的具体说明取决于您的ASGI框架的细节,但通常需要遵循以下三个步骤
-
创建一个
HotReload
实例,传入一个或多个要监视的文件目录,并在必要时传入一个在触发重载之前要调用的回调列表import arel async def reload_data(): print("Reloading server data...") hotreload = arel.HotReload( paths=[ arel.Path("./server/data", on_reload=[reload_data]), arel.Path("./server/static"), ], )
-
安装热重载端点,并注册其启动和关闭事件处理器。如果使用Starlette,可以这样做
from starlette.applications import Starlette from starlette.routing import WebSocketRoute app = Starlette( routes=[WebSocketRoute("/hot-reload", hotreload, name="hot-reload")], on_startup=[hotreload.startup], on_shutdown=[hotreload.shutdown], )
-
将JavaScript代码添加到您的网站HTML中。如果使用Starlette与Jinja模板,可以通过更新全局环境,然后在基础模板中注入脚本来完成此操作
templates.env.globals["DEBUG"] = os.getenv("DEBUG") # Development flag. templates.env.globals["hotreload"] = hotreload
<body> <!-- Page content... --> <!-- Hot reload script --> {% if DEBUG %} {{ hotreload.script(url_for('hot-reload')) | safe }} {% endif %} </body>
示例
示例目录 example
包含一个使用 Markdown 驱动的网站示例,该网站使用 arel
在 Markdown 内容或 HTML 模板更改时刷新浏览器。
许可证
MIT
变更日志
本项目所有显著的更改都将记录在此文件中。
格式基于 Keep a Changelog。
0.3.0 - 2023-12-29
更改
- 使用
watchfiles
代替watchgod
。这解锁了 Python 3.12 支持。(Pull #34)
添加
- 添加 Python 3.12 支持。(Pull #35)
0.2.0 - 2020-07-08
添加
- 添加支持监视多个目录,每个目录都有自己的重新加载回调。(Pull #15)
更改
arel.HotReload("./directory", on_reload=[...])
现在应编写为arel.HotReload(paths=[arel.Path("./directory", on_reload=[...])])
。(Pull #15)
0.1.0 - 2020-04-11
初始版本。
添加
- 添加
HotReload
ASGI 应用程序类。(Pull #1)
项目详情
下载文件
下载适用于您的平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。
源代码分发
arel-0.3.0.tar.gz (13.8 kB 查看哈希值)
构建分发
arel-0.3.0-py3-none-any.whl (8.1 kB 查看哈希值)
关闭
arel-0.3.0.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | c424710c6abfafedadf1ee275ffd049d0e8840bfeb2bdcdbbde762e7eb448011 |
|
MD5 | 9f9db562f13e6125f58e1fc9f01d215f |
|
BLAKE2b-256 | 9312f806493dc5e44a0e555e6c58ed6655379cfd2368f19b3126fab76f79ab22 |
关闭
arel-0.3.0-py3-none-any.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 0edca29af00dc0610d0ac7880bcc48464ac551f7228724f1191035445854996a |
|
MD5 | 597c9bcafa86c3f07e7e06051784cfda |
|
BLAKE2b-256 | 41d90569f4c5218b815fbe3ba0254225127d08483706096f470084b22efca37e |