Python Flask 多環境配置
阿新 • • 發佈:2018-11-29
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