• 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
    
    
    application = create_app()
    
    if __name__ == '__main__':
        print("local数据库连接:", application.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 = "robert@example.com" # For use in application emails
  • 相关阅读:
    vs2015 停 在 update kb2999226 一直不动
    修复vs2012出现 “无法找到包源”的错误
    forward 和redirect的区别
    软件测试分类
    centos7安装HTTPS协议
    php抓取网页特定div区块及图片,从简单入手
    nginx报 File not found 错误
    关于端口
    调试技巧:让断点停在for循环中的 i 为某个值得时候
    an AC a day keeps the WA away ~
  • 原文地址:https://www.cnblogs.com/goingforward/p/10038227.html
Copyright © 2020-2023  润新知