Pas*_*day 153 python apache flask web
我正在研究如何使用Python开发一个像样的Web应用程序.由于我不希望某些高阶结构妨碍我,我的选择落在了轻量级的Flask框架上.时间将证明这是否是正确的选择.
所以,现在我已经设置了一个带有mod_wsgi的Apache服务器,我的测试站点运行正常.但是,我想通过在我制作的py或模板文件中的任何更改时自动重新加载网站来加速开发例程.我看到网站的.wsgi文件中的任何更改都会导致重新加载(即使没有在apache配置文件中使用WSGIScriptReloading),但我仍然需要手动生成它(即插入额外的换行符,保存).当我编辑一些应用程序的py文件时,有什么方法可以导致重新加载吗?或者,我应该使用IDE为我刷新.wsgi文件?
cod*_*eek 186
如果您正在讨论测试/开发环境,那么只需使用调试选项即可.当代码发生变化时,它会自动重新加载烧瓶app.
app.run(debug=True)
Run Code Online (Sandbox Code Playgroud)
或者,从shell:
$ export FLASK_DEBUG=1
$ flask run
Run Code Online (Sandbox Code Playgroud)
http://flask.pocoo.org/docs/quickstart/#debug-mode
Eya*_*vin 165
当前推荐的方式(Flask> = 0.11)与flask命令行实用程序一起使用.
http://flask.pocoo.org/docs/0.11/server/
例:
$ export FLASK_APP=main.py
$ export FLASK_ENV=development
$ flask run
Run Code Online (Sandbox Code Playgroud)
或者在一个命令中:
$ FLASK_APP=main.py FLASK_ENV=development flask run
Run Code Online (Sandbox Code Playgroud)
我更喜欢5000而不是--port因为前者也适用flask.
如果您想要与默认(5000)添加--port选项不同的端口.
例:
$ FLASK_APP=main.py FLASK_ENV=development flask run --port 8080
Run Code Online (Sandbox Code Playgroud)
有更多选项可供选择:
$ flask run --help
Run Code Online (Sandbox Code Playgroud)
Ewa*_*wan 39
werkzeug调试器已经具有"自动重新加载"功能,可以通过执行以下操作之一来启用它:
app.run(debug=True)
Run Code Online (Sandbox Code Playgroud)
要么
app.debug = True
Run Code Online (Sandbox Code Playgroud)
如果需要,您还可以使用单独的配置文件来管理所有设置.例如,我使用'settings.py'和'DEBUG = True'选项.导入此文件也很容易;
app.config.from_object('application.settings')
Run Code Online (Sandbox Code Playgroud)
但是,这不适合生产环境.
我个人选择了Nginx + uWSGI而不是Apache + mod_wsgi,但出于一些性能原因以及配置选项.该触摸重装选项允许你指定一个文件/文件夹会导致uWSGI应用程序重新加载新部署的烧瓶应用.
例如,您的更新脚本会提取最新的更改并触及"reload_me.txt"文件.你的uWSGI ini脚本(由Supervisord保留 - 显然)在这里有这一行:
touch-reload = '/opt/virtual_environments/application/reload_me.txt'
Run Code Online (Sandbox Code Playgroud)
我希望这有帮助!
Kyl*_*ker 21
如果您正在使用uwsgi运行,请查看python自动重新加载选项:
uwsgi --py-autoreload 1
Run Code Online (Sandbox Code Playgroud)
示例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
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
然后运行:
uwsgi --ini uwsgi-dev-example.ini
Run Code Online (Sandbox Code Playgroud)
注意:此示例还启用调试器.
我使用我的nginx设置尽可能接近模仿生产.只需运行烧录应用程序,它内置在nginx后面的Web服务器,就会导致错误的网关错误.
Zac*_*nta 12
A few updates for Flask 1.0
basic approach to hot re-loading is:
$ export FLASK_APP=my_application
$ export FLASK_ENV=development
$ flask run
Run Code Online (Sandbox Code Playgroud)
FLASK_ENV=development (not FLASK_DEBUG=1)flask run --debugger just to make sure it's turned onFLASK_APP and FLASK_ENV if you have an .env file in the project root and have python-dotenv installedAna*_*nan 12
使用这个方法:
app.run(debug=True)
Run Code Online (Sandbox Code Playgroud)
当代码发生更改时,它将自动重新加载 Flask 应用程序。
示例代码:
from flask import Flask
app = Flask(__name__)
@app.route("/")
def index():
return "Hello World"
if __name__ == '__main__':
app.run(debug=True)
Run Code Online (Sandbox Code Playgroud)
好吧,如果您想节省时间,而不是每次发生更改时都重新加载网页,那么您可以尝试使用键盘快捷键Ctrl + R来快速重新加载页面。
小智 9
从终端你可以简单地说
export FLASK_APP=app_name.py
export FLASK_ENV=development
flask run
Run Code Online (Sandbox Code Playgroud)
或者在你的文件中
if __name__ == "__main__":
app.run(debug=True)
Run Code Online (Sandbox Code Playgroud)
小智 9
app.run(use_reloader=True)
Run Code Online (Sandbox Code Playgroud)
我们可以使用这个 use_reloader 以便每次我们重新加载页面时,我们的代码更改都会更新。
我有了不同的想法:
第一的:
pip install python-dotenv
Run Code Online (Sandbox Code Playgroud)
安装python-dotenv模块,它将读取您的项目环境的本地首选项。
第二:
.flaskenv在您的项目目录中添加文件。添加以下代码:
FLASK_ENV=development
Run Code Online (Sandbox Code Playgroud)
完成!
使用 Flask 项目的此配置,当您运行时flask run,您将在终端中看到此输出:
当您编辑文件时,只需保存更改即可。你会看到自动重新加载是为你准备的:
更多解释:
当然,您可以在export FLASK_ENV=development每次需要时手动点击。但是使用不同的配置文件来处理实际的工作环境似乎是一个更好的解决方案,所以我强烈推荐我使用的这种方法。