烧瓶自动重新加载不刷新浏览器

Posted

技术标签:

【中文标题】烧瓶自动重新加载不刷新浏览器【英文标题】:Flask auto reload does not refresh browser 【发布时间】:2018-12-25 01:21:43 【问题描述】:

我已经阅读了关于这个问题的几十个主题,但我找不到对我有用的解决方案,因此非常感谢您为我提供的任何帮助,让我了解是什么破坏了重新加载器。我对 dev 还是很陌生(主要在 node、angular 和 django 中工作)。我已经在 mac 和 ubuntu 上进行了测试,包括一个最小的烧瓶应用程序和一个通过他们的文档设置的大型应用程序,这是我所做的各种尝试的最简单的测试:

在终端:

python3 -m venv virtualenv
source virtualenv/bin/activate
pip install flask
vim server.py

然后

from flask import Flask
app = Flask(__name__)


@app.route('/')
def home():
    return 'Hi'

wq 然后回到终端:

export FLASK_ENV=development
export FLASK_DEBUG=1
export FLASK_APP=server.py
flask run

现在将返回语句字符串从“hi”更改为“hello”,在我点击浏览器刷新之前没有任何变化。重要的是,服务器确实宣布发生了变化——它只是不重新加载浏览器。请参阅下面的输出:

(virtualenv) ➜  test git:(master) ✗ Flask run
 * Serving Flask app "server.py" (lazy loading)
 * Environment: development
 * Debug mode: on
 * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
 * Restarting with stat
 * Debugger is active!
 * Debugger PIN: 297-732-354
 * Detected change in '/Users/pb/Documents/code/projects/test/server.py', reloading
 * Restarting with stat
 * Debugger is active!
 * Debugger PIN: 297-732-354

我已经通过模板渲染、对 css 文件的更改以及上面的简单返回语句进行了尝试。感谢您为我提供的任何帮助。

【问题讨论】:

【参考方案1】:

您可以使用https://github.com/lepture/python-livereload 创建一个可以自动刷新浏览器的 livereload 调试服务器。

【讨论】:

我试过但没有成功。你介意提供一个作为 Github Gist 的可执行示例吗?我真的尝试了几件事(例如这个 --> gist.github.com/amontalenti/8922609)并搜索了一半的谷歌。【参考方案2】:

Flask 检测到本地文件更改,但不会将更改推送到您的浏览器。 Flask 和浏览器是完全解耦的,Flask 只是站在那里等待请求,只有收到请求才会响应。在return 'Hello'之后,浏览器和Flask的连接就要断开了。

如果您不向 Flask 发出请求,Flask 将无法向您发送响应。

【讨论】:

与我合作过的观察者在检测到文件更改时重新加载浏览器是标准行为。烧瓶不能以这种方式工作吗? @AndrogenAgonist Flask 和浏览器完全解耦,Flask 就站在那里,等待请求,只有收到请求才会响应。提前,在“return 'Hello'”之后,Browser和Flask之间的连接就要断开了 冒着提出愚蠢问题的风险,这与 django 或 nodemon 在检测到文件更改时刷新浏览器的方式有何不同?在我最初理解观察者如何运作的意义上,这听起来像烧瓶没有观察者。 根据@TimmyO'Mahony 对post 的回答,django 似乎没有这样的观察者,也许您正在寻找服务器推送或长轮询。 是的,不确定哪些神经元被交叉了,我想我在角度上花了太长时间,它会在不刷新的情况下更新,但这显然不同,感谢大家的帮助和善意的反馈【参考方案3】:

我认为浏览器不应该自行重新加载信息 - 您必须刷新页面才能显示任何新内容,除非您使用某种后端应用程序构建了该功能。

【讨论】:

查看 Bryan Yuan 的回答 - 这是我之前运行过的大多数开发环境的标准功能 - 或者至少是一个简单的包安装,例如我正在使用 node-sass 并添加一个 npm运行 watch:sass 脚本。这不是烧瓶吗?

以上是关于烧瓶自动重新加载不刷新浏览器的主要内容,如果未能解决你的问题,请参考以下文章

js 阻止浏览器默认前进后退不能刷新么

在浏览器中重新加载/刷新页面而不重新提交表单?

在 Docker 上自动重新加载烧瓶服务器

Shiro在logout退出后,怎么防止浏览器的后退刷新操作

当我在 Chrome 中保存对 html 文件的更改时自动重新加载浏览器?

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