自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Python項(xiàng)目中正確讀取寫入配置的方式

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

1、將配置寫在Python文件中

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

2、利用外部配置文件

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

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

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

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

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

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

windows 環(huán)境變量

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

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

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

不利用文件存儲(chǔ),在一定程度上加強(qiáng)了對(duì)密碼等配置信息的保護(hù),但也增加了運(yùn)維的工作量,尤其是當(dāng)需要修改配置時(shí)。

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

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

5、一般項(xiàng)目中建議的配置方式

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

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

# settings/__init__.py
import os
# os.environ.get() 用于獲取系統(tǒng)中的環(huán)境變量,因?yàn)樵谏a(chǎn)環(huán)境中,一般都會(huì)把一些關(guān)鍵性的參數(shù)寫到系統(tǒng)的環(huán)境中。
# 所以PROFILE的值其實(shí)就是我們配置的環(huán)境變量的值。如果沒有配這個(gè)值,默認(rè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 存儲(chǔ)一些公用的配置,然后在開發(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"
}
對(duì)于一些敏感信息可在環(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項(xiàng)目PyCharm

2010-02-26 14:05:57

WCF通信方式

2010-03-03 17:33:52

Python讀取XML

2020-03-06 16:50:08

Java錯(cuò)誤日志

2023-11-26 18:31:41

Linux信號(hào)

2010-03-02 16:05:48

WCF端點(diǎn)配置

2010-05-05 17:19:32

Oracle存儲(chǔ)過程

2010-06-18 13:14:26

SQL Server

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解釋器

2010-03-04 15:12:33

Python算法

2024-09-10 09:05:12

SpringREST并發(fā)

2010-07-20 10:27:57

SQL Server

2023-08-23 13:24:00

異步編程方法

2021-03-19 10:14:28

SpringBoot項(xiàng)目異步調(diào)用

2011-04-26 10:22:23

Hyper-V

2015-08-05 09:33:21

Javawaitnotify
點(diǎn)贊
收藏

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