我正在研究如何用Python开发一个不错的web应用程序。因为我不想让一些高阶结构妨碍我,所以我选择了轻量级的Flask框架。时间会证明这是否是正确的选择。

So, now I've set up an Apache server with mod_wsgi, and my test site is running fine. However, I'd like to speed up the development routine by making the site automatically reload upon any changes in py or template files I make. I see that any changes in site's .wsgi file causes reloading (even without WSGIScriptReloading On in the apache config file), but I still have to prod it manually (ie, insert extra linebreak, save). Is there some way how to cause reload when I edit some of the app's py files? Or, I am expected to use IDE that refreshes the .wsgi file for me?


当前回答

在测试/开发环境中

werkzeug调试器已经有一个“自动重载”功能,可以通过执行以下操作之一来启用:

app.run(debug=True)

or

app.debug = True

如果需要,还可以使用单独的配置文件来管理所有设置。例如,我使用'settings.py'带有'DEBUG = True'选项。导入这个文件也很容易;

app.config.from_object('application.settings')

但是,这不适用于生产环境。

生产环境

就我个人而言,我选择Nginx + uWSGI而不是Apache + mod_wsgi是因为一些性能原因,也是因为配置选项。touch-reload选项允许您指定一个文件/文件夹,该文件/文件夹将导致uWSGI应用程序重新加载新部署的flask应用程序。

例如,您的更新脚本下拉最新的更改并触摸'reload_me.txt'文件。你的uWSGI ini脚本(由supervisor ord维护-显然)有这一行在它的某个地方:

touch-reload = '/opt/virtual_environments/application/reload_me.txt'

我希望这能有所帮助!

其他回答

帮助快速自动更改浏览器:

PIP安装负载

from livereload import Server

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

接下来,再次启动服务器:

如。你的.py文件是app.py

python app.py

使用这个方法:

app.run(debug=True)

当发生代码更改时,它将自动重新加载flask应用程序。

示例代码:

from flask import Flask

app = Flask(__name__)

@app.route("/")
def index():
   return "Hello World"


if __name__ == '__main__':
  app.run(debug=True)

好吧,如果你想节省时间,而不是每次发生更改时都重新加载网页,那么你可以尝试键盘快捷键Ctrl + R来快速重新加载页面。

在开启调试模式的情况下运行flask Run CLI命令,将自动启用reloader。从Flask 2.2开始,你可以在命令行上传递——app和——debug选项。

$ flask --app main.py --debug run

——app也可以设置为module:app或module:create_app,而不是module.py。详见医生的详细说明。

有更多的选择:

$ flask run --help

在Flask 2.2之前,您需要设置FLASK_APP和FLASK_ENV=开发环境变量。

$ export FLASK_APP=main.py
$ export FLASK_ENV=development
$ flask run

在Flask 2.2中仍然可以设置FLASK_APP和FLASK_DEBUG=1。

在终端上你可以简单地说

export FLASK_APP=app_name.py
export FLASK_ENV=development
flask run

或者在你的文件中

if __name__ == "__main__":
    app.run(debug=True)

如果您正在讨论测试/开发环境,那么只需使用调试选项。当发生代码更改时,它将自动重新加载flask应用程序。

app.run(debug=True)

或者,从壳层来看

$ export FLASK_DEBUG=1
$ flask run

http://flask.palletsprojects.com/quickstart/#debug-mode