環境與進程關聯,並且在父進程分叉時繼承副本。在運行其他命令之前,您可以讓bash將設置注入到環境中。
以下命令將在現有bash環境下運行./manage runserver
,並增加兩個額外的環境變量DJANGO_SETTINGS_MODULE
和MY_DB_PASSWORD
。
DJANGO_SETTINGS_MODULE=myproject.settings.dev MY_DB_PASSWORD=foo ./manage.py runserver
正如您所建議的那樣,您可以在設置文件中使用以下Python代碼從環境中提取值。
import os
db_passwd = os.environ.get('MY_DB_PASSWORD', 'default-db-password')
你可以把你的密碼在.profile
,但它可能是一個糟糕的主意,因爲你再有非敏感混合敏感信息。那麼你就必須保護.profile
文件的權限,否則其他人將只能讀取該文件來獲取你的密碼。
我認爲在這種情況下更好的設置管理方法是將一個單獨的文件專用於敏感設置,例如密碼。讓這個文件的權限受到保護,只有那些需要它的用戶才能讀取,例如你的Web服務器。然後您可以從您的settings.py
中讀取此密碼文件以獲取密碼。這裏使用Python ConfigParser module可能很有用。
如果需要,您可以使用環境變量指定此文件的位置,如果沒有指定,可以回退到默認值。
例如。 DB_PASSWD_FILE =〜/ tmp目錄/ test_db_passwords.ini ./manage.py的runserver
然後在settings.py
import os
db_passwd_file = os.environ.get('DB_PASSWD_FILE', '/etc/myproject/db_passwords.ini')
# Instantiate a ConfigParser object here to read passwords from db_passwd_file.
這使得默認行爲在受保護的文件/etc/myprojecdt/db_passwords.ini
系統看,除非該位置已被覆蓋環境變量爲DB_PASSWD_FILE
。
在開發過程中,您可以將DB_PASSWD_FILE
設置爲.profile
中用於開發目的的理智位置。DB_PASSWD_FILE
指向的路徑可以通過使用文件系統權限來保護爲僅可讀取。
謝謝。這對於幫助我理解環境變量的作用以及它們的實際工作方式非常出色。 – demet8 2013-03-22 04:28:28
謝謝,真不錯。 – user2990084 2014-11-26 12:14:38