经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » Python » 查看文章
Python动态配置管理Dynaconf的实现示例详解
来源:jb51  时间:2022/7/25 19:16:04  对本文有异议

正文

Dynaconf 是一个 Python 的第三方模块,旨在成为在 Python 中管理配置的最佳选择。

它可以从各种来源读取设置,包括环境变量、文件、服务器配置等

它适用于任何类型的 Python 程序,包括 Flask 和 Django 扩展

1.准备

开始之前,你要确保 Python 和 pip 已经成功安装在电脑上

然后,请选择以下任一种方式输入命令安装依赖:

  • Windows 环境 打开 Cmd ( 开始-运行-CMD )
  • MacOS 环境 打开 Terminal ( command + 空格输入 Terminal )
  • 如果你用的是 VSCode 编辑器 或 Pycharm,可以直接使用界面下方的 Terminal
  1. pip install dynaconf

2.初步使用DynaConf

在你的项目的根目录中运行 dynaconf init 命令。

  1. cd path/to/your/project/
  2. dynaconf init -f toml

会有类似如下的输出,说明初始化完成:

?? Configuring your Dynaconf environment
------------------------------------------
?? The file `config.py` was generated.
??? settings.toml created to hold your settings.
?? .secrets.toml created to hold your secrets.
?? the .secrets.* is also included in `.gitignore`
beware to not push your secrets to a public repo.
?? Dynaconf is configured! read more on https://dynaconf.com

刚刚初始化的时候我们选择了 toml 格式。实际上你还可以选择 toml|yaml|json|ini|py ,不过 toml 是默认的,也是最推荐的配置格式。

初始化完成后会创建以下文件:

  1. .
  2. ├── config.py # 需要被导入的配置脚本
  3. ├── .secrets.toml # 像密码等敏感信息配置
  4. └── settings.toml # 应用配置

初始化完成后你就可以编写你的配置,编辑settings.toml:

  1. key = "value"
  2. a_boolean = false
  3. number = 1234
  4. a_float = 56.8
  5. a_list = [1, 2, 3, 4]
  6. a_dict = {hello="world"}
  7. [a_dict.nested]
  8. other_level = "nested value"

然后就可以在你的代码中导入并使用这些配置:

  1. from config import settings
  2. assert settings.key == "value"
  3. assert settings.number == 789
  4. assert settings.a_dict.nested.other_level == "nested value"
  5. assert settings['a_boolean'] is False
  6. assert settings.get("DONTEXIST", default=1) == 1

如果是密码等敏感信息,你可以配置在 .secrets.toml 中:

  1. password = "xxxxxxxxxxxxxx"
  2. token = "xxxxxxxxxxxxxxxxxxxxxxxxxxxx"
  3. message = "This file doesn't go to your pub repo"

.secrets.toml 文件会被自动加入到 .gitignore 文件中,这些信息不会被上传到Git仓库上。

同时,DYNACONF还支持带前缀的环境变量:

  1. export DYNACONF_NUMBER=789
  2. export DYNACONF_FOO=false
  3. export DYNACONF_DATA__CAN__BE__NESTED=value
  4. export DYNACONF_FORMATTED_KEY="@format {this.FOO}/BAR"
  5. export DYNACONF_TEMPLATED_KEY="@jinja {{ env['HOME'] | abspath }}"

3.高级使用

你还可以在Flask或Django中使用DynaConf,以Django为例,第一步要先确保已经设置 DJANGO_SETTINGS_MODULE 环境变量:

  1. export DJANGO_SETTINGS_MODULE=yourproject.settings

然后在 manage.py 相同文件夹下运行初始化命令:

  1. dynaconf init -f yaml

然后按照终端上的说明进行操作:

Django app detected
?? Configuring your Dynaconf environment
------------------------------------------
??? settings.yaml created to hold your settings.
?? .secrets.yaml created to hold your secrets.
?? the .secrets.yaml is also included in `.gitignore`
beware to not push your secrets to a public repo
or use dynaconf builtin support for Vault Servers.
? path/to/yourproject/settings.py is found do you want to add dynaconf? [y/N]:

回答 y:

?? Now your Django settings are managed by Dynaconf
?? Dynaconf is configured! read more on https://dynaconf.com

在 Django 上,推荐的文件格式是yaml,因为它可以更轻松地保存复杂的数据结构,但是你依然可以选择使用 toml、json、ini 甚至将你的配置保存为 .py 格式。

初始化 dynaconf 后,在现有的settings.py底部包含以下内容:

  1. # HERE STARTS DYNACONF EXTENSION LOAD
  2. import dynaconf # noqa
  3. settings = dynaconf.DjangoDynaconf(__name__) # noqa
  4. # HERE ENDS DYNACONF EXTENSION LOAD (No more code below this line)

现在,在你的 Django 视图、模型和所有其他地方,你现在可以正常使用 django.conf.settings,因为它已被 Dynaconf 设置对象替换。

  1. from django.conf import settings
  2. def index(request):
  3. assert settings.DEBUG is True
  4. assert settings.NAME == "Bruno"
  5. assert settings.DATABASES.default.name == "db"
  6. assert settings.get("NONEXISTENT", 2) == 2

现在,通过修改 manage.py 相同文件夹下的配置文件,就能让配置全局生效了

以上就是Python动态配置管理Dynaconf实现示例详解的详细内容,更多关于Python动态配置Dynaconf的资料请关注w3xue其它相关文章!

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号