網站首頁 編程語言 正文
正文
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
相關推薦
- 2022-12-04 C++?Boost.Range與Adapters庫使用詳解_C 語言
- 2022-11-07 python多進程使用apply_async的使用方法詳解_python
- 2022-07-18 RabbitMQ隊列阻塞該如何處理
- 2022-05-22 小白也可以完成的0基礎部署Nginx服務_nginx
- 2023-01-08 C#實現給圖片添加日期信息的示例詳解_C#教程
- 2022-03-03 百度地圖 添加 左鍵菜單 Cannot read property 'remove' of unde
- 2024-03-04 echarts 柱狀圖,單獨一根柱子根據條件改變顏色
- 2023-05-23 Golang拾遺之指針和接口的使用詳解_Golang
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支