如何使用python-dotenv解決代碼與敏感信息的分離
“12-Factor” 是構(gòu)建SaaS服務(wù)的一種方法論,這套理論適用于任意語(yǔ)言和后端服務(wù)(數(shù)據(jù)庫(kù)、消息隊(duì)列、緩存等)開發(fā)的應(yīng)用程序。
其中有一條很重要的原則是關(guān)于配置的, 12-Factor 要求代碼和配置嚴(yán)格分離。
為什么要這么做?
如果你的代碼放在Github等外部網(wǎng)絡(luò),哪一天要是代碼不小心泄露了,你的各種密碼,密鑰,等配置全都暴露于公網(wǎng)中,這是一件非??膳碌氖?。
判斷一個(gè)應(yīng)用是否正確的將配置與代碼分離開了,一個(gè)簡(jiǎn)單方法是你的代碼是否可以立刻開源,而不用擔(dān)心有任何敏感信息暴露。
將應(yīng)用的配置存儲(chǔ)于環(huán)境變量中是一種常規(guī)做法,例如在命令行中加入:
export PASSWORD=123456
windows
set PASSWORD=123456
業(yè)務(wù)代碼中,通過環(huán)境變量來加載。
import os env = os.environ.get("PASSWORD") print(env)
這樣做就不會(huì)將敏感信息暴露于業(yè)務(wù)代碼中了,同時(shí)也可以最大程度讓開發(fā)人員接觸正式環(huán)境的敏感信息。
不過,問題來了,將敏感信息設(shè)置成環(huán)境變量,如果這樣的信息非常多,挨個(gè)設(shè)置也太麻煩了。
你一定希望可以將這些敏感信息單獨(dú)放在一個(gè)文件中,始終與代碼分開管理
例如,我們?cè)谝粋€(gè)flask項(xiàng)目中,敏感信息我們專門放在一個(gè)叫.flaskenv 的文件中
.flaskenv 文件
FLASK_DEBUG=1 FLASK_ENV=local AAA=1234
可是這些配置如何加載到環(huán)境變量中去?
python-dotenv
python-dotenv 就是專門干這事的,他能將配置文件的配置信息自動(dòng)加入到環(huán)境變量。
安裝 python-dotenv
pip install python-dotenv
加載配置文件
from dotenv import load_dotenv # 加載文件 load_dotenv(".flaskenv") import os flask_env = os.environ.get("FLASK_ENV") print(flask_env) # local
加載文件后,就可以通過os.environ從環(huán)境變量中讀取內(nèi)容。
flask配置最佳實(shí)踐
在flask中,python-dotenv 可以無縫接入項(xiàng)目中,只要你的項(xiàng)目中存在 .env 或者 .flaskenv 文件,他就會(huì)提示你是否安裝 python-dotenv
$ flask run * Tip: There are .env files present. Do "pip install python-dotenv" to use them.
安裝完后python-dotenv后,就會(huì)自動(dòng)加載里面的配置文件到環(huán)境變量中。
# config.py class LocalConfig(BaseConfig): ENV = "development" FLASK_DEBUG = 1 # 通過變量環(huán)境來加載數(shù)據(jù)庫(kù)配置 SQLALCHEMY_DATABASE_URI = os.getenv("SQLALCHEMY_DATABASE_URI") # app.py def create_app(): app = Flask(__name__) app.config.from_object(LocalConfig) # view.py def hello(): # 加載環(huán)境變量 os.environ.get("AAA")
你不需要自己去加載配置文件,因?yàn)閒lask-cli 幫你做了這個(gè)事,但是生產(chǎn)環(huán)境我們通常會(huì)基于gunicorn來部署我們的應(yīng)用,這時(shí)候就沒法自動(dòng)加載了。你需要在生成app實(shí)例前顯式加載配置文件。
#run.py from app import create_app from dotenv import load_dotenv load_dotenv('.flaskenv') app = create_app()
總結(jié)
到此這篇關(guān)于如何使用python-dotenv解決代碼與敏感信息的分離的文章就介紹到這了,更多相關(guān)python-dotenv代碼與敏感信息分離內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
利用python實(shí)現(xiàn)漢字轉(zhuǎn)拼音的2種方法
這篇文章主要給大家介紹了關(guān)于如何利用python實(shí)現(xiàn)漢字轉(zhuǎn)拼音的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用python具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-08-08python統(tǒng)計(jì)字符串中指定字符出現(xiàn)次數(shù)的方法
這篇文章主要介紹了python統(tǒng)計(jì)字符串中指定字符出現(xiàn)次數(shù)的方法,涉及Python中count函數(shù)的使用技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2015-04-04python數(shù)據(jù)結(jié)構(gòu)樹和二叉樹簡(jiǎn)介
這篇文章主要介紹了python數(shù)據(jù)結(jié)構(gòu)樹和二叉樹簡(jiǎn)介,需要的朋友可以參考下2014-04-04Python在for循環(huán)中更改list值的方法【推薦】
這篇文章主要介紹了Python在for循環(huán)中更改list值的方法,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-08-08Python3.6+Django2.0以上 xadmin站點(diǎn)的配置和使用教程圖解
django自帶的admin站點(diǎn)雖然功能強(qiáng)大,但是界面不是很好看。這篇文章主要介紹了Python3.6+Django2.0以上 xadmin站點(diǎn)的配置和使用 ,本文圖文并茂給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-06-06詳解Python中數(shù)據(jù)處理的方法總結(jié)及實(shí)現(xiàn)
數(shù)據(jù)增強(qiáng)作為前處理的關(guān)鍵步驟,在整個(gè)計(jì)算機(jī)視覺中有著具足輕重的地位。本文為大家總結(jié)了Python中數(shù)據(jù)處理的方法及實(shí)現(xiàn),需要的可以參考一下2022-09-09python中類的輸出或類的實(shí)例輸出為<__main__類名 object at xxxx>這種形式的原因
在本篇文章里小編給大家分享了關(guān)于python中類的輸出或類的實(shí)例輸出為何是<__main__類名 object at xxxx>這種形式,需要的朋友們可以參考下。2019-08-08