跳转到主要内容

Python ASGI Web应用的浏览器热重载

项目描述

arel

Build Status Coverage Python versions Package version

为Python ASGI Web应用提供浏览器热重载。

概述

这是用来做什么的?

arel可用于实现仅用于开发的针对非Python文件的即时重载,这些文件在每个请求中都不是从磁盘读取的。这可能包括HTML模板、GraphQL模式、缓存的渲染Markdown内容等。

它是如何工作的?

arel监视一组文件的变化。当文件发生变化时,arel通过WebSocket通知浏览器,并触发注入的客户端脚本进行页面重载。您可以为任何额外的服务器端操作注册自己的重载钩子,例如重新加载缓存内容或重新初始化其他服务器端资源。

安装

pip install 'arel==0.3.*'

快速入门

有关使用Starlette的示例,请参阅示例部分。

虽然使用arel设置热重载的具体说明取决于您的ASGI框架的细节,但通常需要遵循以下三个步骤

  1. 创建一个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"),
        ],
    )
    
  2. 安装热重载端点,并注册其启动和关闭事件处理器。如果使用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],
    )
    
  3. 将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 查看哈希值

上传时间 Python 3

由以下组织支持: