網(wǎng)站首頁 編程語言 正文
“12-Factor” 是構(gòu)建SaaS服務(wù)的一種方法論,這套理論適用于任意語言和后端服務(wù)(數(shù)據(jù)庫、消息隊列、緩存等)開發(fā)的應(yīng)用程序。
其中有一條很重要的原則是關(guān)于配置的, 12-Factor 要求代碼和配置嚴(yán)格分離。
為什么要這么做?
如果你的代碼放在Github等外部網(wǎng)絡(luò),哪一天要是代碼不小心泄露了,你的各種密碼,密鑰,等配置全都暴露于公網(wǎng)中,這是一件非常可怕的事。
判斷一個應(yīng)用是否正確的將配置與代碼分離開了,一個簡單方法是你的代碼是否可以立刻開源,而不用擔(dān)心有任何敏感信息暴露。
將應(yīng)用的配置存儲于環(huán)境變量中是一種常規(guī)做法,例如在命令行中加入:
export PASSWORD=123456
windows
set PASSWORD=123456
業(yè)務(wù)代碼中,通過環(huán)境變量來加載。
import os env = os.environ.get("PASSWORD") print(env)
這樣做就不會將敏感信息暴露于業(yè)務(wù)代碼中了,同時也可以最大程度讓開發(fā)人員接觸正式環(huán)境的敏感信息。
不過,問題來了,將敏感信息設(shè)置成環(huán)境變量,如果這樣的信息非常多,挨個設(shè)置也太麻煩了。
你一定希望可以將這些敏感信息單獨放在一個文件中,始終與代碼分開管理
例如,我們在一個flask項目中,敏感信息我們專門放在一個叫.flaskenv 的文件中
.flaskenv 文件
FLASK_DEBUG=1 FLASK_ENV=local AAA=1234
可是這些配置如何加載到環(huán)境變量中去?
python-dotenv
python-dotenv 就是專門干這事的,他能將配置文件的配置信息自動加入到環(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配置最佳實踐
在flask中,python-dotenv 可以無縫接入項目中,只要你的項目中存在 .env 或者 .flaskenv 文件,他就會提示你是否安裝 python-dotenv
$ flask run * Tip: There are .env files present. Do "pip install python-dotenv" to use them.
安裝完后python-dotenv后,就會自動加載里面的配置文件到環(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")
原文鏈接:https://juejin.cn/post/7099283807953977358
相關(guān)推薦
- 2022-08-06 pandas數(shù)據(jù)合并之pd.concat()用法詳解_python
- 2022-05-01 Python類的定義和使用詳情_python
- 2022-07-26 使用Nginx+Tomcat實現(xiàn)負(fù)載均衡的全過程_nginx
- 2022-08-23 python文件讀取read及readlines兩種方法使用詳解_python
- 2022-11-07 SwiftUI?引導(dǎo)頁界面實現(xiàn)示例_Swift
- 2022-07-27 Python?迭代器Iterator詳情_python
- 2023-10-10 前端根據(jù)后端數(shù)據(jù)生成表格 行列合并 指定表頭
- 2022-07-13 Android Canvas - save() & restore()
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支