日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
Python項(xiàng)目中正確讀取寫入配置的方式

1、將配置寫在Python文件中

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

成都創(chuàng)新互聯(lián)公司服務(wù)項(xiàng)目包括長(zhǎng)汀網(wǎng)站建設(shè)、長(zhǎng)汀網(wǎng)站制作、長(zhǎng)汀網(wǎng)頁制作以及長(zhǎng)汀網(wǎng)絡(luò)營(yíng)銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢(shì)、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,長(zhǎng)汀網(wǎng)站推廣取得了明顯的社會(huì)效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到長(zhǎng)汀省份的部分城市,未來相信會(huì)繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!

2、利用外部配置文件

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

結(jié)合環(huán)境變量和 python 庫(kù)讀取外部文件,首先開發(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'

當(dāng)前名稱:Python項(xiàng)目中正確讀取寫入配置的方式
文章來源:http://www.5511xx.com/article/dpojgph.html