python flask 即时刷新

  • 解决方案一
  • 解决方案二
  • 解决方案三



本篇博客补充一个小细节,即爬虫训练场项目修改模板代码之后,每次都要重启服务查看效果,如何才能更加便捷。

解决方案一

问题描述

在项目实战的时候,由于我们使用的是 Python Flask 框架,每次修改前端 HTML 页面之后,都要重启一下 flask 服务,然后查看效果,非常不方便。

针对该问题,本篇博客提供两个解决方案。

解决方案:增加模板自动重载配置

打开程序主入口文件,在爬虫训练场这一项目中,入口文件为 playground.py,添加如下代码。

app.jinja_env.auto_reload = True

该配置表示模板修改后,立即生效,无需重启,行业内一般叫做热更新。

使用如下配置也可。

app.config['TEMPLATES_AUTO_RELOAD'] = True

额外的解决方案

实战中还可以使用 manager 管理工具实现自动刷新页面,或者安装第三方模块 livereload 进行实现,后续用到这部分内容,我们继续进行补充。

解决方案二

在 Python Flask 中实现热更新需要使用第三方库,如 Flask-Reloader

Flask-Reloader 是一个 Flask 插件,可以在开发环境中实现热更新,当代码发生改变时会自动重启服务器。

模块的安装非常简单,使用 pip 命令即可。

pip install Flask-Reloader

基本使用流程如下所示。
导入 Flask-Reloader

from flask_reloader import Reloader

实例化 Reloader

reloader = Reloader()

使用 Reloader

if __name__ == "__main__":
    reloader.init_app(app)
    app.run()

在上面的代码中,我们首先实例化了 Reloader 对象,然后使用 init_app() 方法将其初始化到了 Flask 应用中。如果在运行时代码发生了改变,Reloader 会自动重启服务器。

解决方案三

实战中还可以使用 Werkzeug 的 run_with_reloader 函数。
Werkzeug 是 Flask 的底层 WSGI 引擎,提供了 run_with_reloader() 函数来实现热更新。

使用 Werkzeug 的 run_with_reloader() 函数的方法如下:

from werkzeug.serving import run_with_reloader

if __name__ == '__main__':
    run_with_reloader(app.run)

上述代码中 app.run 是 flask 程序的入口函数,在运行时代码发生了改变,run_with_reloader() 会自动重启服务器。