我开始学习 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
这是您提出的一个有趣的问题,因此我构建了一个快速而肮脏的 Flask 应用程序,它利用了 livereload 库。下面列出了使其发挥作用的关键步骤:
下载并安装livereload库:
pip install livereload
在启动 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()
再次启动服务器:
python run.py
在浏览器中导航到本地主机,您的代码更改将自动刷新。对我来说,我采用了 livereload 提供的默认端口 5500,因此我的网址如下所示:
http://localhost:5500/
。通过这些步骤,您现在应该能够利用自动重新加载进行 Python 开发,类似于 webpack 为大多数前端框架提供的功能。
为了完整起见,可以在here
找到代码库希望有帮助!
我使用 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
。
今天尝试了这个,并且有效:
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
如果在 Windows 上:
set FLASK_ENV=development