Python Flask 多环境配置

Python里取配置文件的时候,之前是使用的ini文件和python里configparser 模块:

可参考:https://www.cnblogs.com/feeland/p/4514771.html

后来觉得不够好用,在多个环境的情况下使用起来比较麻烦,就想有没有一种像spring boot里的profile机制呢~

因为项目里用到的Flask作为web框架所以就查了下找到了下面这篇博文:

https://wxnacy.com/2017/08/15/python-2017-08-15-flask-env-config/

根据实际需求和另一篇资料(后面有给出链接)稍微改了下(博主的所有配置放在一个文件里,用不同的类指示不同的环境。我这为了方便和后续配置项增加,把所有的配置文件拆开了),然后就有了下面的代码:

1.bash脚本,用于在跑python项目前设置环境,来设置接下来出现在config文件里的env_flask_config_name值:

#!/usr/bin/bash

ENV=$1

if [ ! ${ENV} ]
then
    ENV=local
fi

export FLASK_CONFIG=${ENV}

2.config.py,用于设定具体的环境,重点在环境的映射字典:

# -*- coding: utf-8 -*
"""多环境配置类

author: Jill

usage:
    from application.config import app
    database_uri = app.config['SQLALCHEMY_DATABASE_URI']
"""
from flask import Flask
from werkzeug.contrib.fixers import ProxyFix
import os

"""
    配置文件映射
"""
CONFIG_NAME_MAPPER = {
    'local': 'local_config.py',
    'dev': 'dev_config.py',
    'prod': 'prod_config.py',
    'test': 'test_config.py'
}


def create_app(flask_config_name=None):
    """
    创建配置
    """
    app = Flask(__name__)
    app.wsgi_app = ProxyFix(app.wsgi_app)
    env_flask_config_name = os.getenv('FLASK_CONFIG')
    # 指定环境
    config_mapper_name = flask_config_name or env_flask_config_name or 'local'
    config_name = CONFIG_NAME_MAPPER[config_mapper_name]
    app.config.from_pyfile(config_name)

    return app


app = create_app()

if __name__ == '__main__':
    print("local数据库连接:", app.config['SQLALCHEMY_DATABASE_URI'])

3.接下来就是具体的配置文件了(以dev_config.py为例子)(参考:http://www.pythondoc.com/exploreflask/configuration.html):

DEBUG = True # Turns on debugging features in Flask
BCRYPT_LEVEL = 12 # Configuration for the Flask-Bcrypt extension
MAIL_FROM_EMAIL = "[email protected]" # For use in application emails

猜你喜欢

转载自www.cnblogs.com/goingforward/p/10038227.html
今日推荐