关于flask中加载配置的三种方式

5.Flask程序加载配置的三种方式

  # d03_config.py
  配置都放在app.config, 可以简单理解为是一个字典.
  # 加载方式一, 通过类, 灵活
  # class Config:
  #     REDIS_URL = 'redis://127.0.0.1/1'
  # app.config.from_object(Config)
  
  # 加载方式二, 通过配置文件
  # app.config.from_pyfile('d03_conf.ini')
  
  # 加载方式三, 通过环境变量取到配置文件.方便管理多种环境. 测试环境读取测试配置, 开发环境读取开发配置
  app.config.from_envvar('CONFIG_FILE')
  
  备注:
      项目中通常配置项很多, 以文件读取第三种为主. 敏感信息通过运维时环境变量传进来.

第三种加载配置文件的方式:
如果是在pycharm中:
点开文件配置在这里插入图片描述
找到环境变量
在这里插入图片描述
添加并填写环境变量的键值对
在这里插入图片描述
导入环境变量名称与填写的环境变量名称相对应
在这里插入图片描述
这样做的好处是放置开发时将数据库账号密码等会出现在配置文件内的敏感信息上传至github,而这些配置信息通过后期运维时再传入。

### 实现Flask应用从Nacos动态加载配置 为了使Flask能够从Nacos动态加载配置,需先安装必要的依赖库。通过`pip install nacos-sdk-python flask`命令可以完成所需包的安装。 在Flask项目中引入Nacos客户端来获取配置信息,并将其集成至Flask的应用上下文中。下面展示了一个简单的例子说明如何操作: #### 初始化Nacos Client并读取配置 ```python from flask import Flask import nacos server_addresses = "localhost:8848" namespace = "public" client = nacos.NacosClient(server_addresses, namespace) data_id = 'flask-config' group = 'DEFAULT_GROUP' config = client.get_config(data_id=data_id, group=group) ``` 这段代码初始化了连接到本地运行的Nacos实例的客户端,并尝试从中检索名为`flask-config`的数据ID下的配置项[^2]。 #### 将配置应用于Flask App 接下来把取得的字符串形式的配置转换成Python字典对象以便于后续处理,再设置给Flask应用实例: ```python app = Flask(__name__) if config is not None and isinstance(config, str): from ast import literal_eval try: config_dict = literal_eval(config) app.config.update(config_dict) except Exception as e: print(f"Parsing error {e}") else: raise ValueError('Failed to fetch configuration') ``` 此部分实现了将来自Nacos的配置安全地解析为Python数据结构,并更新到了Flask应用的配置属性上[^3]。 #### 动态监听配置变化 为了让应用能响应配置的变化,还需订阅特定配置项的通知事件,在收到变更通知时重新加载最新的配置版本: ```python def update_flask_config(): new_config = client.get_config(data_id=data_id, group=group) if new_config != config: global config config = new_config # 更新Flask配置 try: config_dict = literal_eval(new_config) with app.app_context(): app.config.update(config_dict) print("Configuration updated.") except (ValueError, SyntaxError) as err: print(f"Failed updating configuration due to parsing errors: {err}") listener = lambda event_type, data_id, group, content: update_flask_config() client.add_config_watcher(data_id, group, listener) ``` 上述逻辑确保每当指定的配置发生变化时都会触发回调函数执行相应的动作,即同步最新版配置Flask环境中[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值