簡介
在一些項目中,處於安全性的要求,一般不將密碼,key等放入到配置文件中。然而這些代碼又是上傳在git
等平台上。為了方便管理。一般采用系統變量的方式來實現。
flask
官方推薦使用python-dotenv
包來管理特殊的配置。
使用方式
下載
pip install python-dotenv
目錄結構及代碼
.
├── .env
└── settings.py
# settings.py
from dotenv import load_dotenv
load_dotenv()
# 或者加一個配置,會默認覆蓋已有環境變量的配置,推薦
load_dotenv(verbose=True)
# 或者,指定配置文件地址
from pathlib import Path # python3 only
env_path = Path('.') / '.env'
load_dotenv(dotenv_path=env_path)
示例如下:
# .env .env 一般是不提交到git上的。記得使用.gitignore 忽略
MYSQL_USER="root"
MYSQL_PASSWORD="mysql"
MYSQL_HOST="localhost"
MYSQL_PORT=3306
MYSQL_DATABASE="test"
REDIS_HOST="localhost"
REDIS_PORT=6379
REDIS_DECODE_RESPONSES=true
REDIS_PASSWORD=""
# settings.py
import os
from dotenv import load_dotenv
load_dotenv(override=True)
# 一般的非隱秘的配置,可直接寫在此處
DEBUG = True
# 讀取環境變量中的配置
MYSQL_USER = os.getenv("MYSQL_USER")
MYSQL_PASSWORD = os.getenv("MYSQL_PASSWORD")
MYSQL_HOST = os.getenv("MYSQL_HOST")
MYSQL_PORT = int(os.getenv("MYSQL_PORT")) # python-dotenv不能自動轉換類型,需添加轉換
MYSQL_DATABASE = os.getenv("MYSQL_DATABASE")
REDIS_HOST = os.getenv("REDIS_HOST")
REDIS_PORT = int(os.getenv("REDIS_PORT"))
REDIS_DECODE_RESPONSES = True
REDIS_PASSWORD = os.getenv("REDIS_PASSWORD")
引入變量的方法就是普通的python
導入:
from settings import MYSQL_USER