python優(yōu)雅實(shí)現(xiàn)代碼與敏感信息分離的方法
“12-Factor” 是構(gòu)建SaaS服務(wù)的一種方法論,這套理論適用于任意語言和后端服務(wù)(數(shù)據(jù)庫、消息隊(duì)列、緩存等)開發(fā)的應(yīng)用程序。
其中有一條很重要的原則是關(guān)于配置的, 12-Factor 要求代碼和配置嚴(yán)格分離。
為什么要這么做?
如果你的代碼放在Github等外部網(wǎng)絡(luò),哪一天要是代碼不小心泄露了,你的各種密碼,密鑰,等配置全都暴露于公網(wǎng)中,這是一件非常可怕的事。
判斷一個(gè)應(yīng)用是否正確的將配置與代碼分離開了,一個(gè)簡單方法是你的代碼是否可以立刻開源,而不用擔(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è)文件中,始終與代碼分開管理
例如,我們在一個(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ù)庫配置
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")到此這篇關(guān)于python優(yōu)雅實(shí)現(xiàn)代碼與敏感信息分離的方法的文章就介紹到這了,更多相關(guān)python代碼與敏感信息分離內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
django實(shí)現(xiàn)用戶注冊實(shí)例講解
在本篇文章里小編給大家整理的是關(guān)于django用戶注冊的相關(guān)實(shí)例內(nèi)容,有興趣的朋友們學(xué)習(xí)下。2019-10-10
Python實(shí)現(xiàn)關(guān)鍵路徑和七格圖計(jì)算詳解
這篇文章主要為大家詳細(xì)介紹了如何利用Python實(shí)現(xiàn)關(guān)鍵路徑和七格圖計(jì)算,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起了解一下2023-03-03
opencv銀行卡號(hào)識(shí)別的項(xiàng)目實(shí)踐
本文主要介紹了opencv銀行卡號(hào)識(shí)別的項(xiàng)目實(shí)踐,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2025-04-04
使用PM2+nginx部署python項(xiàng)目的方法示例
這篇文章主要介紹了使用PM2+nginx部署python項(xiàng)目的方法示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-11-11
python selenium執(zhí)行所有測試用例并生成報(bào)告的方法
今天小編就為大家分享一篇python selenium執(zhí)行所有測試用例并生成報(bào)告的方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-02-02
Python 計(jì)算機(jī)視覺編程進(jìn)階之OpenCV 進(jìn)行霍夫變換
霍夫變換(Hough)是一個(gè)非常重要的檢測間斷點(diǎn)邊界形狀的方法。它通過將圖像坐標(biāo)空間變換到參數(shù)空間,來實(shí)現(xiàn)直線與曲線的擬合,通過本篇文章我們來詳細(xì)了解它2021-11-11
tensorflow模型繼續(xù)訓(xùn)練 fineturn實(shí)例
今天小編就為大家分享一篇tensorflow模型繼續(xù)訓(xùn)練 fineturn實(shí)例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-01-01

