使用 Python 开发 Flask 应用程序时如何自动刷新浏览器?

How to automate browser refresh when developing an Flask app with Python?

我开始学习 Flask 来开发 Web 应用程序。我真正缺少的是 any 代码更改(包括静态文件、模板等)后自动刷新浏览器。这似乎是几乎所有 Javascript 框架中的标准功能。前端人员对此有几个术语:自动重新加载/刷新、热重新加载/刷新 (hotreload)、实时重新加载/刷新 (livereload),...

Whosebug 上的大多数类似问题都与 Flask 服务器的 auto-reload 有关 (--> https://whosebug.com/search?q=flask+auto+reload)。

J 只是想要一个简单的浏览器刷新。

我用谷歌搜索并尝试了几件事 - 但没有成功:

我怎样才能拥有顺畅的 Flask 开发体验,而不必每天在浏览器中按 1000 次 F5 键来查看我的更改结果?

我认为答案接近上面 link 的 python-livereload。 所以我想我的问题的另一个标题可能是:

Does somebody have a working example of Flask + python-livereload?

我从他们的文档中得到它是愚蠢的:)

编辑:为了完整起见,这里是我正在使用的 Flask 应用程序。

# filename: main.py

from flask import Flask, render_template
from livereload import Server



app = Flask(__name__)

@app.route('/')
def index():
    return "INDEX"

@app.route('/bart')
def use_jinja():
    return render_template('basic.html')



if __name__ == '__main__':
    server = Server(app.wsgi_app)
    server.serve(port=5555)

我用

启动应用程序
python main.py

这是您提出的一个有趣的问题,因此我构建了一个使用 livereload 库的快速而肮脏的 Flask 应用程序。下面列出了使它起作用的关键步骤:

  1. 下载并安装 livereload 库:

    pip install livereload

  2. 在启动烧瓶应用程序的主文件中,run.py 在我的特定情况下,用 livereload 提供的 Server class 包装烧瓶应用程序.

例如,我的 run.py 文件如下所示:

from app import app
from livereload import Server

if __name__ == '__main__':
    server = Server(app.wsgi_app)
    server.serve()
  1. 再次启动服务器:

    python run.py

  2. 在浏览器中导航到本地主机,您的代码更改将是 auto-refreshed。对我来说,我使用了 livereload 提供的默认端口 5500,所以我的 url 如下所示:http://localhost:5500/.

通过这些步骤,您现在应该能够利用 auto-reloads 进行 python 开发,类似于 webpack 为大多数前端框架提供的功能。

为了完整起见,可以找到代码库 here

希望对您有所帮助!

如果在 Windows:

set FLASK_ENV=development

我使用 Guard::LiveReload 因为 python-livereload 的解决方案不能正确地调试(对我来说)。

第一个终端模拟器中:

$ cd my-flask-project
$ flask run
 * Serving Flask app 'webface' (lazy loading)
 * Environment: development
 * Debug mode: on
 * Running on http://127.0.0.1:54321/ (Press CTRL+C to quit)
 * Restarting with stat
 * Debugger is active!

第二个u终端仿真器中:

$ cd my-flask-project
$ guard init livereload 

现在我编辑 Guardfile 和 add/edit watch。像这样:

  watch(%r{.+\.py})
  watch(%r{webface/.+\.(css|js|html(\.j2)?)})

再次在终端模拟器中:

$ guard
17:29:25 - INFO - LiveReload is waiting for a browser to connect.
17:29:25 - INFO - Guard is now watching at '/home/marek/my-flask-project'
[1] guard(main)> 17:29:29 - INFO - Browser connected.
17:29:31 - INFO - Reloading browser: webface/templates/base.html.j2
17:45:41 - INFO - Reloading browser: webface/templates/base.html.j2
[1] guard(main)>

可能需要在浏览器中单击 livereload 扩展按钮 以将浏览器连接到 guard