Python动态配置管理Dynaconf的实现示例详解
作者:编程学习网 发布时间:2021-01-24 19:35:06
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 相同文件夹下的配置文件,就能让配置全局生效了
来源:https://juejin.cn/post/7124198542079442957


猜你喜欢
- 先给大家介绍下Python除法之传统除法、Floor除法及真除法python3.0 /总是执行真除法,不管操作数的类型,都返回浮点数结果(即
- 目录1. 从标准输入中读取2. 单独打开一个文件3. 批量打开多个文件4. 读取的同时备份文件5. 标准输出重定向替换6. 不得不介绍的方法
- 在机器学习领域,支持向量机SVM(Support Vector Machine)是一个有监督的学习模型,通常用来进行模式识别、分类(异常值检
- 模型VGG,数据集cifar。对照这份代码走一遍,大概就知道整个pytorch的运行机制。 来源 定义模型:'''V
- linspace生成有序列表,重点在数据范围与数据个数上linspace(0,1,11),即从0到1闭区间,划分为11个数据点>>
- 前言本文主要记录python下音频常用的操作,以.wav格式文件为例。其实网上有很多现成的音频工具包,如果仅仅调用,工具包是更方便的。更多p
- 一、安装第三方库是可能出现如下错误提示:二、解决办法:最好的解决办法可以通过“Pycharm”左下角
- Pandas最初被作为金融数据分析工具而开发出来,因此,pandas为时间序列分析提供了很好的支持。Pandas的名称来自于面板数据(pan
- 在计算机普及的现代设计领域,文字的设计的工作很大一部分由计算机代替人脑完成了(很多平面设计软件中都有制作艺术汉字的引导,以及提供了数十上百种
- 今天给大家分享一个用原生JS实现的好看计数器,效果如下:以下是代码实现,欢迎大家复制粘贴和收藏。<!DOCTYPE html>&
- 今天看到了这个文章感觉内容挺多的,就是比较乱,实在不好整理,脚本之家小编就简单整理了一下,希望大家能凑合看吧分组后分组合计以及总计SQL语句
- 这个分页使用的是0游标,也就是Rs.Open Sql,Conn,0,1。但是感觉也快不了多少,10万条数据的分页时间300多豪秒之间。代码如
- Windows下ORACLE完全卸载:使用OUI可以卸载数据库,但卸载后注册表和文件系统内仍会有部分残留。这些残留不仅占用磁盘空间,而且影响
- 使用opencv对图像进行编码,一方面是图像二进制传输的需要,另一方面对图像压缩。以jpeg压缩为例:1、转为二进制编码img = cv2.
- 正在看的ORACLE教程是:Oracle RMAN快速入门指南。前言: 这篇文章主要介绍RMAN的常用方法,其中包含了作者一些自己的经验,里
- 前言:在转换操作中,我们执行各种操作,例如更改系列的数据类型,将系列更改为列表等。为了执行转换操作,我们有各种有助于转换的功能,例如.ast
- 每天换一个壁纸,每天好心情。# -*- coding: UTF-8 -*- from __future__ import unicode_l
- 先给大家介绍下python中random模块random与numpy.random对比:1、random.random():生成[0,1)之
- 可能大多数人在学习C语言的时候,最先接触的数据类型就是字符串,因为大多教程都是以"Hello world"这个程序作为入
- 首先说一下需求,我需要将数据以分钟为单位进行分组,然后每一分钟内的数据作为一行输出,因为不同时间的数据量不一样,所以所有数据按照最长的那组数