我正在研究如何用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?


当前回答

我有不同的想法:

第一:

pip install python-dotenv

安装python-dotenv模块,该模块将读取项目环境的本地首选项。

第二:

在项目目录中添加.flaskenv文件。添加以下代码:

FLASK_ENV=development

这是完成了!

使用此配置为您的Flask项目,当您运行Flask运行时,您将在终端中看到以下输出:

编辑文件时,保存更改即可。你会看到自动重载为你:

更多解释:

当然,您可以在需要的时候手动点击export FLASK_ENV=development。但是使用不同的配置文件来处理实际的工作环境似乎是一个更好的解决方案,所以我强烈推荐我使用的这种方法。

其他回答

如果你正在使用uwsgi运行,看看python的auto reload选项:

uwsgi --py-autoreload 1

示例uwsgi-dev-example.ini:

[uwsgi]
socket = 127.0.0.1:5000
master = true
virtualenv = /Users/xxxx/.virtualenvs/sites_env
chdir = /Users/xxx/site_root
module = site_module:register_debug_server()
callable = app
uid = myuser
chmod-socket = 660
log-date = true
workers = 1
py-autoreload = 1

site_root / __init__ . py

def register_debug_server():
    from werkzeug.debug import DebuggedApplication

    app = Flask(__name__)
    app.debug = True
    app = DebuggedApplication(app, evalex=True)
    return app

然后运行:

uwsgi --ini uwsgi-dev-example.ini

注意:此示例还启用调试器。

我用nginx设置尽可能地模拟生产过程。简单地运行flask应用程序,在nginx后面的web服务器中,它会导致一个糟糕的网关错误。

app.run(use_reloader=True)

我们可以使用这个use_reloader,这样每次重新加载页面时,我们的代码更改都会被更新。

使用这个方法:

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应用程序。

app.run(debug=True)

或者,从壳层来看

$ export FLASK_DEBUG=1
$ flask run

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

对于Flask 1.0到2.2,热重新加载的基本方法是:

$ export FLASK_APP=my_application
$ export FLASK_ENV=development
$ flask run

你应该使用FLASK_ENV=development(而不是FLASK_DEBUG=1) 作为安全检查,你可以运行flask run——debugger来确保它是打开的 Flask CLI现在会自动读取FLASK_APP和FLASK_ENV之类的东西,如果你在项目根目录中有一个.env文件,并且安装了python-dotenv