Skip to main content
 首页 » 编程设计

python之如何使用 create_app 将 Flask 应用程序中的不同配置设置提供给 uwsgi

2025年05月04日27lvdongjie

在我的 Flask 应用程序的 config.py 中,我有 LocalConfig 和 ProdConfig 后者将在部署应用程序后用于生产。

现在我正在使用 uWsgi 为 Nginx 提供应用程序,这里是我创建的 myapp.wsgi。

from myapp import create_app 
from myapp.config import ProdConfig 
 
app = create_app(config=ProdConfig) 

并且在其中一个 app.py create_app 中定义为:

def create_app(config=None, app_name=None, blueprints=None): 
 
    # some code 
    app = Flask(app_name, instance_path=INSTANCE_FOLDER_PATH, instance_relative_config=True) 
    configure_app(app, config) 
    # some other code 
 
    return app 
 
def configure_app(app, config=None): 
    """Different ways of configurations.""" 
 
    app.config.from_object(LocalConfig) 
    app.config.from_pyfile('production.cfg', silent=True) 
 
    if config: 
        app.config.from_object(config) 

我想知道,uWSGI 能正常使用吗? uWSGI 能否成功应用ProdConfig?

还是使用环境变量来区分不同的配置设置更好?比如 if os.environ.get('PROD', True): #do something?

哪种方式更好? Flask 的 create_app() 一个还是 env 变量一个?还有其他合适的方法吗?

请您参考如下方法:

一种常见的做法是将配置存储在字典中。

class Config: 
     ALL_CAPS_CONFIG = 'SOME VALUE' 
 
class DevConfig(Config): 
    pass 
 
class TestConfig(Config): 
    pass 
 
class ProdConfig(Config): 
    pass 
 
configs = { 
  'dev'  : DevConfig, 
  'test' : TestConfig, 
  'prod' : ProdConfig, 
  'default' : ProdConfig 
  } 

然后在实际创建应用程序的地方,您需要执行如下操作::

from config import configs 
import os 
 
evn = os.environ.get('MY_FLASK_APP_ENV', 'default') 
 
create_app(config=configs[evn]) 

这样您就可以通过更改 shell 中的变量轻松地在环境之间切换。