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

问题描述 投票:0回答:4

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

在 Stackoverflow 上,大多数类似的问题都与 Flask 服务器的自动重新加载有关(--> https://stackoverflow.com/search?q=flask+auto+reload)。

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

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

如何才能拥有 Flask 的流畅开发体验,而不必每天在浏览器中按 F5 键 1000 次只是为了查看更改结果?

我认为答案就在上面链接的

python-livereload
附近。 所以我想我的问题的另一个标题可能是:

有人有 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
python flask refresh livereload hot-reload
4个回答
27
投票

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

  1. 下载并安装livereload库:

    pip install livereload

  2. 在启动 Flask 应用程序的主文件中,

    run.py
    在我的特定情况下,使用 livereload 提供的
    Server
    类包装 Flask 应用程序。

例如,我的

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. 在浏览器中导航到本地主机,您的代码更改将自动刷新。对我来说,我采用了 livereload 提供的默认端口 5500,因此我的网址如下所示:

    http://localhost:5500/

通过这些步骤,您现在应该能够利用自动重新加载进行 Python 开发,类似于 webpack 为大多数前端框架提供的功能。

为了完整起见,可以在here

找到代码库

希望有帮助!


1
投票

我使用 Guard::LiveReload 因为

python-livereload
的解决方案在调试时无法正常工作(对我来说)。

first终端模拟器中:

$ 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 并添加/编辑

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


0
投票

今天尝试了这个,并且有效:

app.py:

# use livereload==2.5.1 only
from flask import Flask, render_template
from livereload import Server

app = Flask(__name__)
app.debug = True

@app.get("/")
def index():
    return render_template("index.html")

# don't use flask run, use python3 app.py
server = Server(app.wsgi_app)
server.watch("templates/*.*")  # or what have you
server.serve(port=5000) # if you want the standard Flask port

templates/index.html
中,在
</body>
之前添加以下脚本:

<script src="https://cdnjs.cloudflare.com/ajax/libs/livereload-js/3.1.0/livereload.min.js"></script>

然后:

python app.py


-2
投票

如果在 Windows 上:

set FLASK_ENV=development
© www.soinside.com 2019 - 2024. All rights reserved.