日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

如何使用python-dotenv解決代碼與敏感信息的分離_python

作者:foofish ? 更新時間: 2022-06-02 編程語言

“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

相關推薦

欄目分類
最近更新