乐趣区

关于python:Dynaconf-轻松实现-Python-动态配置管理

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

它能够从各种起源读取设置,包含环境变量、文件、服务器配置等。

它实用于任何类型的 Python 程序,包含 Flask 和 Django 扩大。

1. 筹备

开始之前,你要确保 Python 和 pip 曾经胜利装置在电脑上。

(可选 1) 如果你用 Python 的目标是数据分析,能够间接装置 Anaconda,它内置了 Python 和 pip.

(可选 2) 此外,举荐大家用 VSCode 编辑器,它有许多的长处。

请抉择以下任一种形式输出命令装置依赖

  1. Windows 环境 关上 Cmd (开始 - 运行 -CMD)。
  2. MacOS 环境 关上 Terminal (command+ 空格输出 Terminal)。
  3. 如果你用的是 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 = "s3cr3t"
token = "dfgrfg5d4g56ds4gsdf5g74984we5345-"
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 实战教程,能够关注公众号:Python 编程学习圈,理解更多编程技术常识!

退出移动版