1.从文件中加载
main.py文件
from datetime import timedelta
from flask import Flask
app = Flask(__name__)
# 设置config类,父类继承dict
# app.config['PERMANENT_SESSION_LIFETIME'] = timedelta(days=7)
# 从文件中加载配置,缺点是代码冗余
app.config.from_pyfile('config.py')
@app.route('/')
def index():
return 'index'
if __name__ == '__main__':
app.run(debug=True)
config.py文件
from datetime import timedelta
# 定义和配置的同名的全局变量
PERMANENT_SESSION_LIFETIME = timedelta(days=7)
优点
配置单独封装起来, 方便统一管理
缺点
如果有多套配置, 则复⽤性较差
2.从对象中加载
优点
面向对象的形式, 可以定义子类来继承公共配置和实现子类个性化的配置
main.py文件
from flask import Flask
app = Flask(__name__)
# 从对象中加载配置
from config import DevelopmentConfig
app.config.from_object(DevelopmentConfig)
@app.route('/')
def index():
print(app.config.get('PERMANENT_SESSION_LIFETIME'))
print(app.config.get('SQL_URL'))
return 'index'
if __name__ == '__main__':
app.run(debug=True)
config.py文件
from datetime import timedelta
class BaseConfig: # 相同的配置放入基类中,不同的配置子类重写
PERMANENT_SESSION_LIFETIME = timedelta(days=7)
class DevelopmentConfig(BaseConfig):
'''开发环境的变量'''
SQL_URL = 'mysql://127.0.0.1/infodb'
class ProductingConfig(BaseConfig):
'''生产环境的变量'''
SQL_URL = 'mysql://192.168.243.133/infodb'
class TestingConfig(BaseConfig):
'''测试环境的变量'''
SQL_URL = 'mysql://43.168.243.166/infodb'
封装工厂函数&动态创建应用
启动命令:
export FLASK_APP="main:create_app('dev')"
flask run -h 127.0.0.1 -p 5000
main.py文件
from flask import Flask, current_app
from config import config_dict
def index():
print(current_app.config.get('PERMANENT_SESSION_LIFETIME'))
print(current_app.config.get('SQL_URL'))
return 'index'
# 定义工厂函数:将对象的创建过程封装起来,根据需求创建对象
def create_app(config_type):
# 创建flask应用和加载配置
app = Flask(__name__)
# 根据配置类型取出配置子类
config_class = config_dict[config_type]
app.config.from_object(config_class)
# 添加路由
app.add_url_rule('/', endpoint=index.__name__, view_func=index)
return app
config.py文件
from datetime import timedelta
class BaseConfig: # 相同的配置放入基类中,不同的配置子类重写
PERMANENT_SESSION_LIFETIME = timedelta(days=7)
class DevelopmentConfig(BaseConfig):
'''开发环境的变量'''
SQL_URL = 'mysql://127.0.0.1/infodb'
class ProductingConfig(BaseConfig):
'''生产环境的变量'''
SQL_URL = 'mysql://192.168.243.133/infodb'
class TestingConfig(BaseConfig):
'''测试环境的变量'''
SQL_URL = 'mysql://43.168.243.166/infodb'
config_dict = {
'dev': DevelopmentConfig,
'pro': ProductingConfig,
'test': TestingConfig
}
缺点
不⽅便设置⾃定义的配置(代码被git管理, ⼀旦修改为⾃定义配置, 团队其他成员还需要改回来)
重要配置容易泄露(代码被团队共享, 且需要传到git服务器上)
3.从环境变量中加载
# 从环境中加载变量, 设置silent=True, 及时未找到文件也不会报错
app.config.from_envvar('ENV_CONFIG', silent=True)
先从对象中加载默认配置, 再 通过环境变量重载⾃定义配置和隐私配置
silent=True, 找不到该环境变量也不报错
启动命令:
export ENV_CONFIG=文件绝对路径/config.py
flask run -h 127.0.0.1 -p 5000