python-decouple簡介

來源:互聯網
上載者:User

標籤:

改篇文章主要翻譯於:https://pypi.python.org/pypi/python-decouple/

有不對的地方望各位大神指出,謝謝。

decouple簡介

將設定從代碼中分離開
decouple將協助你解析你的程式設定檔,達到更改你的設定而不用重新部署程式的效果


decouple將很方便的協助你做下面的事情:
1. 在ini或者.env檔案中儲存你的參數 2. 定義你的預設值 3. 適當的將你的配置轉換成合適的值 4. 你的程式中只需要一個配置模組來進行設定   decouple最開始是為django開發的,後面成為了一個獨立通用的工具,將配置從代碼中分離   為什麼要使用decouple?

通常情況下,web架構會設定不同種類的參數:

    1. 語言環境和國際化     2. 中介軟體和應用程式     3. 資源儲存相關:資料庫,cache類。等     4. 外部服務憑證:Amazon S3或者Twitter     5.  預上線環境的設定 前兩個是整個項目的設定,後面是部署執行個體的設定     為什麼我們不直接使用環境變數呢? 環境變數通過os.environ擷取,但是返回的是字串,比較棘手 例如,你有一 個環境換量DEBUG=False,你可能可以運行如下代碼  這段代碼將返回Tru e,因為os.environ[‘DEBUG‘] 返回的是一個 字串"False",因為這是一個非Null 字元串,所以返回True Decouple提供一種能夠解決這個問題的解決方案 :config(‘DEBUG‘, cast=bool)   
if os.environ[‘DEBUG‘]:    print Trueelse:    print False

 

Decouple的安裝:

pip install python-decouple

 

使用方法: 你的settings.py.檔案裡面,你可以這麼寫:      1. 匯入config對象:
from decouple import config

 


    2. 擷取配置參數
SECRET_KEY = config(‘SECRET_KEY‘)DEBUG = config(‘DEBUG‘, default=False, cast=bool)EMAIL_HOST = config(‘EMAIL_HOST‘, default=‘localhost‘)EMAIL_PORT = config(‘EMAIL_PORT‘, default=25, cast=int)

這些設定檔應該放在哪裡? Decouple支援兩種類型:.ini檔案和.env 檔案 INI檔案樣本: 建立一個settings.ini檔案,下一步在你的檔案中可以寫入如下格式的配置,例如:
[settings]DEBUG=TrueTEMPLATE_DEBUG=%(DEBUG)sSECRET_KEY=ARANDOMSECRETKEYDATABASE_URL=mysql://myuser:[email protected]/mydatabasePERCENTILE=90%%#COMMENTED=42

 

注意:因為ConfigParser模組支援字串填充的原因,百分比符號%應該由兩個百分比符號,也就是%%代替 ENV檔案樣本:

在你的程式的根目錄中建立一個.env檔案,例如:

DEBUG=TrueTEMPLATE_DEBUG=TrueSECRET_KEY=ARANDOMSECRETKEYDATABASE_URL=mysql://myuser:[email protected]/mydatabasePERCENTILE=90%#COMMENTED=42
我在django中因該怎麼使用呢? 如果我在我的程式根目錄有一個.env 檔案,下面是我的setting.py程式的一個片段,下面的程式,我推薦unipath和dj-database-url一起配合使用:
# coding: utf-8from decouple import configfrom unipath import Pathfrom dj_database_url import parse as db_url  BASE_DIR = Path(__file__).parent DEBUG = config(‘DEBUG‘, default=False, cast=bool)TEMPLATE_DEBUG = DEBUG DATABASES = {    ‘default‘: config(        ‘DATABASE_URL‘,        default=‘sqlite:///‘ + BASE_DIR.child(‘db.sqlite3‘),        cast=db_url    )} TIME_ZONE = ‘America/Sao_Paulo‘USE_L10N = TrueUSE_TZ = True SECRET_KEY = config(‘SECRET_KEY‘) EMAIL_HOST = config(‘EMAIL_HOST‘, default=‘localhost‘)EMAIL_PORT = config(‘EMAIL_PORT‘, default=25, cast=int)EMAIL_HOST_PASSWORD = config(‘EMAIL_HOST_PASSWORD‘, default=‘‘)EMAIL_HOST_USER = config(‘EMAIL_HOST_USER‘, default=‘‘)EMAIL_USE_TLS = config(‘EMAIL_USE_TLS‘, default=False, cast=bool) # ...

 注意沒有定義的參數:

在上面的例子中,除了 SECRET_KEY = config(‘SECRET_KEY‘),在.env中 都有一個預設的配置參數。 如果‘SECRET_KEY‘在 .env檔案中一直都沒有,decouple 將拋出一個UndefinedValueError 這種策略會當你在忘記配置一個參數的時候發生不可預期的行為 下面將介紹最重要的和環境變數相關的檔案: 有些時候你想不通過.ini或者.env檔案改變一個參數,從3.0開始,decouple將遵從unix的方式,環境變數優先順序高於設定檔變數; 你可以覆蓋設定檔的變數:
DEBUG=True python manage.py

這是什麼原理呢?

Decouple 有5個類:

  • Config
    • 檢索設定檔所在的位置
  • RepositoryIni
    • 按照順序從os.environ,ini檔案中讀取值
    • 注意:從3.0開始unix環境變數高於設定檔變數
  • RepositoryEnv
    • 按照順序從os.environ,.env檔案中讀取值
    • 注意:從3.0開始unix環境變數高於設定檔變數
  • RepositoryShell
    • 只是從os.environ中擷取環境變數
  • AutoConfig
    • 檢查你使用的配置
    • 它將從你的配置模組路徑遞迴的搜尋settings.ini或者.env檔案

 一個簡單的例子:

.evn檔案

user_info=rootport=3306ipadd=127.0.0.1switch=on

pyton解析檔案:

import decoupleconfig = decouple.AutoConfig()ipadd = config(‘ipadd‘)print ipadd

詳細的具體用法可以讀bootcamp的源碼:

https://github.com/vitorfs/bootcamp

 

python-decouple簡介

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.