我正在研究如何用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?
如果你正在使用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服务器中,它会导致一个糟糕的网关错误。
Flask应用程序可以选择在调试模式下执行。在这种模式下,默认情况下启用了开发服务器的两个非常方便的模块,即重新加载器和调试器。
当重新加载器被启用时,Flask会监视项目的所有源代码文件,并在任何文件被修改时自动重新启动服务器。
缺省情况下,调试模式是关闭的。要启用它,在调用flask run之前设置一个FLASK_DEBUG=1的环境变量:
(venv) $ export FLASK_APP=hello.py for Windows use > set FLASK_APP=hello.py
(venv) $ export FLASK_DEBUG=1 for Windows use > set FLASK_DEBUG=1
(venv) $ flask run
* Serving Flask app "hello"
* Forcing debug mode on
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
* Restarting with stat
* Debugger is active!
* Debugger PIN: 273-181-528
在开发过程中,使服务器运行时启用重新加载程序是非常有用的,因为每次修改和保存源文件时,服务器都会自动重新启动并接受更改。
在开启调试模式的情况下运行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。