成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Python項目中正確讀取寫入配置的方式

開發(fā) 后端
結(jié)合環(huán)境變量和 python 庫讀取外部文件,首先開發(fā)通常不會接觸到生成環(huán)境,因此生成環(huán)境的配置文件由運維來寫,運維將應(yīng)用所需要的配置寫好后,放到生產(chǎn)服務(wù)器的指定位置,代碼從指定位置讀取配置。

1、將配置寫在Python文件中

這種方法非常簡單,但它存在嚴重的安全問題,我們都知道不應(yīng)該把配置寫在代碼中,如果有人把我們的源代碼上傳到了github中,那么數(shù)據(jù)庫的配置就相當于向全世界公開了,當然,當配置文件不包含敏感信息時,也可以才有這種簡單的方法。

2、利用外部配置文件

讓配置文件和代碼獨立開來,通常使用 json、yaml或者ini的文件格式來存儲配置。

結(jié)合環(huán)境變量和 python 庫讀取外部文件,首先開發(fā)通常不會接觸到生成環(huán)境,因此生成環(huán)境的配置文件由運維來寫,運維將應(yīng)用所需要的配置寫好后,放到生產(chǎn)服務(wù)器的指定位置,代碼從指定位置讀取配置。

為了方便程序的統(tǒng)一調(diào)試,可以提前約定好一個系統(tǒng)環(huán)境變量(XXX_CONFIG_PATH)來指定配置文件的存放路徑。

例如:export XXX_CONFIG_PATH =
/home/test/configs/config.ini
 此為設(shè)置臨時環(huán)境變量

linux、ubuntu 環(huán)境變量

查看環(huán)境變量:
env
設(shè)置永久環(huán)境變量
1./etc/profile 的文件下編輯,所改變的環(huán)境變量是面向所有用戶的
export CLASSPATH = /../... 該路徑為絕對路徑
2.在當前用戶目錄下./barsh_profile文件中修改 進行修改的話,僅對當前的用戶生效
vim /home/wens/.barshc
export CLASSPATH = /../... 該路徑為絕對路徑
最后使用source命令 可以直接使環(huán)境變量生效
source /home/wens/.barshc //直接跟環(huán)境變量的文件

windows 環(huán)境變量

查看環(huán)境變量:
set
查看某個環(huán)境變量:
set path
修改環(huán)境變量
輸入 “set 變量名=變量內(nèi)容”即可。比如將path設(shè)置為“d:\nmake.exe”,只要輸入set path="d:\nmake.exe"
注意:所有的在cmd命令行下對環(huán)境變量的修改只對當前窗口有效,不是永久性的修改。也就是說當關(guān)閉此cmd命令行窗口后,將不再起作用。
永久性修改環(huán)境變量的方法有兩種:
一種是直接修改注冊表
另一種是通過我的電腦-〉屬性-〉高級,來設(shè)置系統(tǒng)的環(huán)境變量(查看詳細)
設(shè)置了環(huán)境變量后,需要重啟 pycharm 生效

3、直接使用系統(tǒng)環(huán)境變量讀取配置

此方法不使用文件來存儲配置信息,將所有的配置信息存儲到環(huán)境變量中,在實踐中比較常見,運維通過 ansible 部署腳本,在程序運行前將需要配置的信息導(dǎo)入到環(huán)境變量中。

不利用文件存儲,在一定程度上加強了對密碼等配置信息的保護,但也增加了運維的工作量,尤其是當需要修改配置時。

4、微服務(wù)架構(gòu)

在一些微服務(wù)架構(gòu)中,會專門開發(fā)配置中心,程序直接從線上讀取配置,配置的管理也會開發(fā)一套GUI,方便開發(fā)和運維。

5、一般項目中建議的配置方式

-app
-__init.py
-app.py
-settings
-__init__.py
-base.py
-dev.py
-prod.py

其中 __init__.py 中,添加判斷邏輯,判斷當前環(huán)境使用 開發(fā)環(huán)境還是生產(chǎn)環(huán)境,從而加載不同的配置參數(shù)。

# settings/__init__.py
import os
# os.environ.get() 用于獲取系統(tǒng)中的環(huán)境變量,因為在生產(chǎn)環(huán)境中,一般都會把一些關(guān)鍵性的參數(shù)寫到系統(tǒng)的環(huán)境中。
# 所以PROFILE的值其實就是我們配置的環(huán)境變量的值。如果沒有配這個值,默認走dev的配置。
# PYTHON_PRO_PROFILE = os.environ.get("PYTHON_PRO_PROFILE", "dev")
PYTHON_PRO_PROFILE = os.environ.get("PYTHON_PRO_PROFILE")
print("是開發(fā)環(huán)境還是生產(chǎn)環(huán)境: ", PYTHON_PRO_PROFILE)
if PYTHON_PRO_PROFILE == "dev":
from .dev import *
elif PYTHON_PRO_PROFILE == "prod":
from .prod import *
else:
raise Exception("Not supported runtime profile {}".format(PYTHON_PRO_PROFILE))

其中 base.py 存儲一些公用的配置,然后在開發(fā)環(huán)境 dev.py 與生產(chǎn)環(huán)境 prod.py 中導(dǎo)入 base.py 的變量。

# settings/base.py
import os
import time
# os.path.abspath: 獲取完整路徑(包含文件名)
current_exec_abspath = os.path.abspath(__file__)
current_exec_dir_name, _ = os.path.split(current_exec_abspath)
current_up_dir, _ = os.path.split(current_exec_dir_name)
current_up2_dir, _ = os.path.split(current_up_dir)
print('------log dir=------', current_up2_dir)
# 日志文件路徑設(shè)置
log_path = f"{current_up2_dir}/logs"
if not os.path.exists(log_path):
os.makedirs(log_path)
t = time.strftime("%Y_%m_%d")
log_path_file = f"{log_path}/interface_log_{t}.log"

其中 dev.py:

# 導(dǎo)入了base下所有參數(shù)
from .base import *
database = {
"protocol": "mysql+mysqlconnector",
"username": "xxxxxx",
"password": "hash string",
"port": 3306,
"database": "repo"
}

其中 prod.py:

# 導(dǎo)入了base下所有參數(shù)
from .base import *
database = {
"protocol": "xxxxxxxxxxx",
"username": "xxxxxxxxxxx",
"password": "xxxxxxxxxxx",
"port": 3344,
"database": "xxxx"
}
對于一些敏感信息可在環(huán)境變量里設(shè)置,通過如下方法獲取,例如:
MAIL_SERVER = os.environ.get('MAIL_SERVER', 'smtp.163.com')
MAIL_USERNAME = os.environ.get('MAIL_USERNAME') or 'test'
MAIL_PASSWORD = os.environ.get('MAIL_PASSWORD') or '12345678'
責(zé)任編輯:姜華 來源: 今日頭條
相關(guān)推薦

2023-10-21 20:50:00

Python項目PyCharm

2010-02-26 14:05:57

WCF通信方式

2010-03-03 17:33:52

Python讀取XML

2020-03-06 16:50:08

Java錯誤日志

2023-11-26 18:31:41

Linux信號

2010-03-02 16:05:48

WCF端點配置

2010-06-18 13:14:26

SQL Server

2010-05-05 17:19:32

Oracle存儲過程

2024-10-18 16:21:49

SpringPOM

2021-10-25 09:00:37

Node.jsJS前端

2011-06-29 16:50:17

Qt 顯示寬字符

2023-08-07 16:14:32

propertiesSpring框架

2010-03-04 11:07:21

Python解釋器

2024-09-10 09:05:12

SpringREST并發(fā)

2010-03-04 15:12:33

Python算法

2010-07-20 10:27:57

SQL Server

2009-07-22 09:01:54

導(dǎo)出LOB數(shù)據(jù)DB2

2015-08-05 09:33:21

Javawaitnotify

2011-04-26 10:22:23

Hyper-V

2010-06-28 10:36:42

SQL Server數(shù)
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 中文字幕亚洲视频 | wwwsihu| 在线观看av网站永久 | 日本精品久久 | 久久成人综合 | 日韩在线精品 | 99精品一区二区三区 | 欧美激情亚洲天堂 | 久久精品亚洲精品国产欧美 | 久久综合国产 | 一区二区三区在线 | 成年男女免费视频网站 | 亚洲国产aⅴ精品一区二区 免费观看av | 精品国产一区二区三区日日嗨 | 午夜久久久久 | 免费三级网 | 国产免费一级片 | 欧美精品一区二区三区在线 | 欧美一区二区三区在线观看视频 | 日本在线你懂的 | 日韩成人在线网址 | 午夜二区| 久久影院一区 | 久久无毛 | 免费一级欧美在线观看视频 | 国产精品毛片av | 国户精品久久久久久久久久久不卡 | 久久综合久色欧美综合狠狠 | 麻豆国产一区二区三区四区 | 亚洲精品成人av久久 | 国产免费观看视频 | 国产免费一区二区三区网站免费 | 天天综合网永久 | 国产精品久久久久久久久久免费看 | 国产欧美精品一区二区三区 | 中文字幕在线免费观看 | 久久专区| 国产伦精品一区二区三毛 | 噜噜噜噜狠狠狠7777视频 | 久久久久久国产 | 国产精品123区|