Python动态配置管理Dynaconf的实现示例详解

 更新时间:2022年07月25日 16:30:54   作者:编程学习网  
这篇文章主要为大家介绍了Python动态配置管理Dynaconf实现示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

正文

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

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

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

1.准备

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

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

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

2.初步使用DynaConf

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

cd path/to/your/project/
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 是默认的,也是最推荐的配置格式。

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

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

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

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

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

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

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

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

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

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

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

3.高级使用

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

export DJANGO_SETTINGS_MODULE=yourproject.settings

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

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底部包含以下内容:

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

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

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

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

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

相关文章

  • Pycharm+django2.2+python3.6+MySQL实现简单的考试报名系统

    Pycharm+django2.2+python3.6+MySQL实现简单的考试报名系统

    这篇文章主要介绍了Pycharm+django2.2+python3.6+MySQL实现简单的考试报名系统,本文图文并茂给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-09-09
  • Python字符串内置函数功能与用法总结

    Python字符串内置函数功能与用法总结

    这篇文章主要介绍了Python字符串内置函数功能与用法,结合实例形式总结分析了Python常见字符串操作函数的功能、分类、使用方法及相关操作注意事项,需要的朋友可以参考下
    2019-04-04
  • Python编程快速上手——Excel表格创建乘法表案例分析

    Python编程快速上手——Excel表格创建乘法表案例分析

    这篇文章主要介绍了Python Excel表格创建乘法表,结合具体实例形式分析了Python接受cmd命令操作Excel文件创建乘法表相关实现技巧,需要的朋友可以参考下
    2020-02-02
  • Flask中app.route装饰器参数的使用

    Flask中app.route装饰器参数的使用

    app.route()是Flask框架中用于定义路由的装饰器函数,本文主要介绍了Flask中app.route装饰器参数的使用,具有一定的参考价值,感兴趣的可以了解一下
    2023-11-11
  • 基于Python实现火车票抢票软件

    基于Python实现火车票抢票软件

    每年的节假日一到,大家头疼的总时同一个问题:你买到回家的票了吗?尤其是大型的节日:国庆、春节等。本文将利用Python编写一个火车票抢票软件,感兴趣的可以了解一下
    2022-07-07
  • 对tensorflow 的模型保存和调用实例讲解

    对tensorflow 的模型保存和调用实例讲解

    今天小编就为大家分享一篇对tensorflow 的模型保存和调用实例讲解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-07-07
  • python ES连接服务器的方法详解

    python ES连接服务器的方法详解

    使用Python连接Elasticsearch服务器进行数据搜索和分析是一项常见操作,本文详细介绍了如何使用elasticsearch-py客户端库连接到Elasticsearch服务器,并执行创建索引、添加文档及搜索等基本操作
    2024-10-10
  • Python读写二进制文件的示例详解

    Python读写二进制文件的示例详解

    在Python编程中,我们经常需要处理各种类型的文件,其中包括二进制文件,本文将详细介绍如何使用Python读写二进制文件,并提供一些实际应用的示例,希望对大家有所帮助
    2024-01-01
  • 基于python实现查询ip地址来源

    基于python实现查询ip地址来源

    这篇文章主要介绍了基于python实现查询ip地址来源,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-06-06
  • PyTorch中的nn.ConvTranspose2d模块详解

    PyTorch中的nn.ConvTranspose2d模块详解

    nn.ConvTranspose2d是PyTorch中用于实现二维转置卷积的模块,广泛应用于生成对抗网络(GANs)和卷积神经网络(CNNs)的解码器中。该模块通过参数如输入输出通道数、卷积核大小、步长、填充等,能控制输出尺寸和避免棋盘效应
    2024-09-09

最新评论