【flask】加载配置、切换配置、隐私配置
1.加载配置
flask加载配置的方式有多种
1)加载默认配置。flask启动时会加载默认的配置,该配置可以通过app.default_config
查看,那是一个类字典类型,我们自然也可以通过直接修改它,app.config["键"] = 值
2)从类对象加载。新建一个类,然后用过app.config.from_object(类名)
加载,从文件加载类似
3)从环境变量加载。from_envvar(变量名,silent=True)
main.py
from flask import Flask
from .settings import *
app = Flask(__name__)
# 查看默认配置项,app.default_config
# 方案1:
app.config["DEBUG"] = True
print(app.config["SQL_HOST"])
# 方案2:
app.config.from_object(DevelopmentConfig) # 在settingspy文件中自定义配置类
# app.config.from_pyfile("配置文件路径")
# 方案3
# export CONFIG=/XXX/secret_config.py
app.config.from_envvar("CONFIG", silent=True) # silent为True,即使环境变量不存在也不会报错
@app.route("/")
def index():
return "index page"
if __name__ == '__main__':
app.run()
settings.py
class BaseConfig(object):
DEBUG = True
SECRET_KET = "asfnikahsf"
class DevelopmentConfig(BaseConfig):
DEBUG = True
SQL_HOST = "127.0.0.1"
SQL_PORT = 3306
class ProductionConfig(BaseConfig):
DEBUG = True
SQL_HOST = "192.168.1.15"
SQL_PORT_MASTER = 3306
SQL_PORT_SLAVE = 8306
class TestingConfig(BaseConfig):
DEBUG = True
SQL_HOST = "127.0.0.1"
SQL_PORT = 3306
2.切换配置
上面在settings.py文件里定义了多种配置方案,但是如果需要切换的话就得修改代码,这样不利于开发和测试,我们可以使用工厂模式动态创建
settings.py
class BaseConfig(object):
DEBUG = True
SECRET_KET = "asfnikahsf"
class DevelopmentConfig(BaseConfig):
DEBUG = True
SQL_HOST = "127.0.0.1"
SQL_PORT = 3306
class ProductionConfig(BaseConfig):
DEBUG = True
SQL_HOST = "192.168.1.15"
SQL_PORT_MASTER = 3306
SQL_PORT_SLAVE = 8306
class TestingConfig(BaseConfig):
DEBUG = True
SQL_HOST = "127.0.0.1"
SQL_PORT = 3306
# 定义字典来记录 配置类型 和 配置子类 之间的映射关系
config_dict = {
"dev": DevelopmentConfig,
"pro": ProductionConfig,
"test": TestingConfig
}
main.py
from flask import Flask
from settings import config_dict
def create_app(config_name):
app = Flask(__name__)
config_class = config_dict[config_name]
app.config.from_object(config_class)
return app
app = create_app("dev")
@app.route("/")
def index():
return "index page"
if __name__ == '__main__':
app.run()
上面的写法虽然用了工厂函数,但是依然是写死的,flask支持动态创建,格式是FLASK_APP="应用所在模块:工厂函数(参数)"
$ export FLASK_APP="main:create_app('dev')" # 设置环境变量, 通过调用函数 设置配置并动态创建Flask应用
$ flask run # 运行web程序
注意,如果通过动态创建应用,则之前那种通过app = create_app('dev')
的方法就会失效
3.加载隐私配置
如果直接把 SECRET_KEY 定义在项目中,也可能不是很安全,还可以通过环境变量的方式加载隐私配置
我们把secret_key定义在一个py文件中,比如
secret_config.py
SECRET_KEY = "kopsafgh"
main.py
from flask import Flask
from settings import config_dict
def create_app(config_name):
app = Flask(__name__)
# 当silent=True,即使该环境变量不存在也不会报错
app.config.from_envvar("CONFIG", silent=True)
return app
app = create_app("dev")
@app.route("/")
def index():
return "index page"
if __name__ == '__main__':
app.run()
然后在终端执行命令
$ export FLASK_APP="main" # 设置内置环境变量
$ export ENV_CONFIG="/xx/secret_config.py" # 设置隐私配置对应的环境变量
$ flask run # 启动web程序
还没有评论,来说两句吧...