从单独的配置文件使用env变量启动flask仍在生产中

时间:2019-05-18 14:20:55

标签: python python-3.x flask

我有一个名为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)

1 个答案:

答案 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起烧瓶   推荐方法。这样做的原因是由于   重新加载机制有效,但有一些怪异的副作用(例如   两次执行某些代码,有时会崩溃而没有消息或   语法或导入错误发生时死亡。