工程配置加载方式
前言
- 本篇来学习下Flake工程配置加载方式
配置对象中加载
- 应用场景:作为默认配置写在代码中
python
# -*- coding: utf-8 -*-
# @Time : 2023/9/2
# @Author : 大海
from flask import Flask
class DefaultConfig(object):
"""默认配置"""
MYSQL_HOST = '192.168.66.66'
app = Flask(__name__)
# 设置配置对象方式读取配置
app.config.from_object(DefaultConfig)
@app.route('/')
def index():
# 读取配置,相当于字典中取值
mysql_host = app.config.get('MYSQL_HOST')
# mysql_host = app.config['MYSQL_HOST']
print(mysql_host)
return '<b>Hello 大海!</b>'
if __name__ == '__main__':
app.run()
配置文件中加载
- 应用场景:项目中使用固定的配置文件
python
# setting.py
# -*- coding: utf-8 -*-
# @Time : 2023/9/2
# @Author : 大海
MYSQL_HOST = '192.168.88.88'
python
# -*- coding: utf-8 -*-
# @Time : 2023/9/2
# @Author : 大海
from flask import Flask
app = Flask(__name__)
# 设置配置文件方式加载配置
app.config.from_pyfile('setting.py')
@app.route('/')
def index():
# 读取配置,相当于字典中取值
mysql_host = app.config.get('MYSQL_HOST')
# mysql_host = app.config['MYSQL_HOST']
print(mysql_host)
return '<b>Hello 大海!配置文件方式加载配置。</b>'
if __name__ == '__main__':
app.run()
环境变量中加载
- 先设置环境变量
shell
# export 变量名=配置文件名 Linux系统环境中使用
export PROJECT_SETTING=setting.py
python
# -*- coding: utf-8 -*-
# @Time : 2023/9/2
# @Author : 大海
from flask import Flask
app = Flask(__name__)
# 设置环境变量方式加载配置
app.config.from_envvar('PROJECT_SETTING', silent=True)
@app.route('/')
def index():
# 读取配置,相当于字典中取值
mysql_host = app.config.get('MYSQL_HOST')
# mysql_host = app.config['MYSQL_HOST']
print(mysql_host)
return '<b>Hello 大海!环境变量方式加载配置。</b>'
if __name__ == '__main__':
app.run()
silent 参数说明:
- Flase:没找到变量值时,报错通知,默认为Flase
- True:没找到变量值时也正常运行下去
三种配置方式优缺点
- 配置对象
- 优点:继承,可复用
- 缺点:敏感数据暴露代码中
- 配置文件
- 优点:独立配置文件,保护敏感数据
- 缺点:不能继承,文件路径固定,不灵活
- 环境变量
- 优点:独立配置文件,保护敏感数据,文件路径不固定,灵活
- 缺点: 不方便,要记得设置环境变量
工厂模式创建Flask app
shell
# -*- coding: utf-8 -*-
# @Time : 2023/9/2
# @Author : 大海
from flask import Flask
class DefaultConfig(object):
"""默认配置"""
MYSQL_HOST = '192.168.66.66'
def create_flask_app(config):
app = Flask(__name__)
# 设置配置对象方式读取配置
app.config.from_object(config)
# 设置环境变量方式加载配置
app.config.from_envvar('PROJECT_SETTING', silent=True)
return app
app = create_flask_app(DefaultConfig)
@app.route('/')
def index():
# 读取配置,相当于字典中取值
mysql_host = app.config.get('MYSQL_HOST')
# mysql_host = app.config['MYSQL_HOST']
print(mysql_host)
return '<b>Hello 大海!</b>'
if __name__ == '__main__':
app.run()