網站首頁 編程語言 正文
“12-Factor” 是構建SaaS服務的一種方法論,這套理論適用于任意語言和后端服務(數據庫、消息隊列、緩存等)開發的應用程序。
其中有一條很重要的原則是關于配置的, 12-Factor 要求代碼和配置嚴格分離。
為什么要這么做?
如果你的代碼放在Github等外部網絡,哪一天要是代碼不小心泄露了,你的各種密碼,密鑰,等配置全都暴露于公網中,這是一件非常可怕的事。
判斷一個應用是否正確的將配置與代碼分離開了,一個簡單方法是你的代碼是否可以立刻開源,而不用擔心有任何敏感信息暴露。
將應用的配置存儲于環境變量中是一種常規做法,例如在命令行中加入:
export PASSWORD=123456
windows
set PASSWORD=123456
業務代碼中,通過環境變量來加載。
import os env = os.environ.get("PASSWORD") print(env)
這樣做就不會將敏感信息暴露于業務代碼中了,同時也可以最大程度讓開發人員接觸正式環境的敏感信息。
不過,問題來了,將敏感信息設置成環境變量,如果這樣的信息非常多,挨個設置也太麻煩了。
你一定希望可以將這些敏感信息單獨放在一個文件中,始終與代碼分開管理
例如,我們在一個flask項目中,敏感信息我們專門放在一個叫.flaskenv 的文件中
.flaskenv 文件
FLASK_DEBUG=1 FLASK_ENV=local AAA=1234
可是這些配置如何加載到環境變量中去?
python-dotenv
python-dotenv 就是專門干這事的,他能將配置文件的配置信息自動加入到環境變量。
安裝 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從環境變量中讀取內容。
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后,就會自動加載里面的配置文件到環境變量中。
# config.py class LocalConfig(BaseConfig): ENV = "development" FLASK_DEBUG = 1 # 通過變量環境來加載數據庫配置 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(): # 加載環境變量 os.environ.get("AAA")
你不需要自己去加載配置文件,因為flask-cli 幫你做了這個事,但是生產環境我們通常會基于gunicorn來部署我們的應用,這時候就沒法自動加載了。你需要在生成app實例前顯式加載配置文件。
#run.py from app import create_app from dotenv import load_dotenv load_dotenv('.flaskenv') app = create_app()
總結
原文鏈接:https://foofish.net/python-dotenv.html
相關推薦
- 2022-09-24 ASP.NET?MVC實現路由功能_實用技巧
- 2022-07-10 axios調用接口報錯
- 2022-04-17 瀏覽器無法復制文字解決辦法
- 2022-06-02 redis?sentinel監控高可用集群實現的配置步驟_Redis
- 2023-11-22 Linux的vim命令如何使用
- 2022-12-23 Kotlin?try?catch異常處理i詳解_Android
- 2022-07-25 SQL?Server系統函數介紹_MsSql
- 2022-10-19 react實現動態選擇框_React
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支