我有一个名为config.py的单独文件,在其中有我的环境类,然后导入到python,使用from_object方法将配置文件设置为app.config,但是当我调用flask运行时,它仍然显示生产即使将调试模式设置为true。
from flask import Flask
from config import DevConfig
app = Flask(__name__)
app.config.from_object(DevConfig)
print(DevConfig.DEBUG)
@app.route('/')
def home():
return '<h1>Hello World</h1>'
if __name__ == '__main__':
app.run()
config.py
class Config(object):
pass
class ProdConfig(Config):
pass
class DevConfig(Config):
DEBUG = True
结果
* Serving Flask app "main.py"
* Environment: production
WARNING: This is a development server. Do not use it in a production deployment.
Use a production WSGI server instead.
* Debug mode: off
True
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
答案 0 :(得分:1)
根据Flask documentation for Builtin configuration values:
env属性映射到此配置键。这是由 FLASK_ENV环境变量,如果已设置,则可能无法按预期运行 在代码中。
configuration best practices documentation显示了针对不同环境使用多种配置的示例。
根据文档,我得到了Debug mode: on
,但是环境仍然显示为production
。
文件夹结构:
.
├── app.py
└── configurations.py
app.py
:
from flask import Flask
from configurations import DevelopmentConfig
app = Flask(__name__)
app.config.from_object(DevelopmentConfig)
@app.route('/')
def home():
return '<h1>Hello World</h1>'
if __name__ == '__main__':
app.run()
configurations.py
:
class Config(object):
DEBUG = False
TESTING = False
class ProductionConfig(Config):
pass
class DevelopmentConfig(Config):
DEBUG = True
class TestingConfig(Config):
TESTING = True
运行应用程序:
(venv) python app.py
* Serving Flask app "app" (lazy loading)
* Environment: production
WARNING: This is a development server. Do not use it in a production deployment.
Use a production WSGI server instead.
* Debug mode: on
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
* Restarting with stat
* Debugger is active!
* Debugger PIN: 312-674-275
127.0.0.1 - - [18/May/2019 23:10:36] "GET / HTTP/1.1" 200 -
已安装的软件包:
Click==7.0
Flask==1.0.3
itsdangerous==1.1.0
Jinja2==2.10.1
MarkupSafe==1.1.1
pkg-resources==0.0.0
Werkzeug==0.15.4
由于debug
模式为on
,因此该应用程序在开发环境中运行。但是Flask文档建议使用flask
方法来运行项目。
要将Flask切换到开发环境并启用调试模式,请设置FLASK_ENV
:
$ export FLASK_ENV=development
$ flask run
(在Windows上,使用set
代替export
。)
来自Flask doc:
示例:
if __name__ == '__main__':
app.run()
这在普通情况下效果很好,但是对于开发来说效果不好,这就是为什么从Flask 0.11起烧瓶 推荐方法。这样做的原因是由于 重新加载机制有效,但有一些怪异的副作用(例如 两次执行某些代码,有时会崩溃而没有消息或 语法或导入错误发生时死亡。