第19天 目錄規範
目錄規範
人生三問:
1. 什麼是目錄規範 目錄規範就是寫程式的時候對目錄做的一種規定。 2. 為什麼要用目錄規範 為了使我們的程式程式碼能夠更好的管理,具有更好的可讀性,減少程式碼的冗餘。 3. 怎麼使用目錄規範 會建立以下幾個目錄 bin 放的是程式的可執行檔案 conf 配置檔案 core 邏輯程式碼檔案 lib 庫檔案 db 資料檔案 log 日誌檔案 readme 說明文件
案例分享:
1. 在一個資料夾下面建立了三個檔案,如下
atm檔案資訊如下:
def login(): print('loginatm檔案內容') # 開啟使用者檔案為驗證 with open('userinfo', 'rt', encoding='utf-8') as f: print(f.read()) def register(): print('register') with open('userinfo', 'at', encoding='utf-8') as f: print(f.write('這是註冊')) def repayment(): print('repayment') def logger(log_str): # 寫入日誌檔案內容with open('log.txt', 'at', encoding='utf-8') as f: f.write(log_str) def run(): print('歡迎!') while True: print('1.登入 2.註冊 3.還款...') index = input('>>').strip() if index == '1': login() elif index == '2': register()elif index == '3': repayment() else: print('重新輸入!') run()
問題一: 如果我們的使用者資訊檔案和日誌資訊檔案的路徑改變了,我們該怎麼改這個程式,我們需要改變程式碼中所有包含路徑的資訊,我們這個程式碼只寫了三個,當然好改,但是如果是一個大型的專案我們難道要一個一個的修改嗎?當然不必要,我們只需要把路徑賦值給一個變數,當用戶需要修改的時候只需要把變數的路徑 改一下就可以了。因此我們程式碼改動如下
USER_FILE_PATH = r'H:\python_study\day19\測試\userinfo' LOG_FILE_PATH = r'H:\python_study\day19\測試\log.txt' def login(): print('login') # 開啟使用者檔案為驗證 with open(USER_FILE_PATH, 'rt', encoding='utf-8') as f: print(f.read()) def register(): print('register') with open(USER_FILE_PATH, 'at', encoding='utf-8') as f: print(f.write('這是註冊')) def repayment(): print('repayment') def logger(log_str): # 寫入日誌檔案內容 with open(USER_FILE_PATH, 'at', encoding='utf-8') as f: f.write(log_str) def run(): print('歡迎!') while True: print('1.登入 2.註冊 3.還款...') index = input('>>').strip() if index == '1': login() elif index == '2': register() elif index == '3': repayment() else: print('重新輸入!') run()atm更改路徑變數
問題二:路徑修改完成之後我們會發現多出來兩個變數,這兩個變數是可以根據使用者檔案的不同進行修改的,也就是說這個是我們程式的一個配置資訊,如果之後配置資訊有很多,那麼再把這些配置資訊放在atm檔案中,可能使用者都需要找個大半天也不知道應該更改哪個值,因此我們需要建立一個用來專門存放配置資訊的資料夾,那就是conf, 存放配置資訊的我們暫時建立一個settings.py配置檔案,然後把剛剛那兩個配置資訊寫進去。
問題三:在我們的測試目錄下面有很多的檔案,其中有日誌檔案,資料檔案以及執行檔案,很亂,隨著我們專案越來越大,可能資料檔案也越來越多,產生的日誌也會越來越多,因此,我們需要專門的建立一個目錄log檔案來存放我們的日誌檔案,我們還需要專門的建立一個數據檔案來存放我們的資料,因此我們的目錄結構就變成了下面這個樣子
問題四: 現在雖然說我們的目錄結構已經很清晰了,但是我們目前只是有一個核心程式atm,如果我們再加上一個購物車,管理員操作程式呢,我們就會發現程式的可執行檔案太多,如果給使用者使用者根本就不清楚哪一個才是程式的執行入口,因此我們需要建立一個bin目錄來存放程式的執行入口,把一些功能的核心程式放在core目錄下面,如下:
問題五:雖然說這樣讓我們的程式碼變得又清晰了很多,但是有這樣一個問題,在atm中我們有一個寫入日誌的函式,這個函式在很多的過程中都會使用到,無論是轉賬, 提現啊等都會呼叫這個函式去寫入檔案。 如果我們在寫一個使用者登入認證裝飾器,我們會發現在很多的場景也會使用到這個函式。也就是說某一個函式可能被很多的函式所呼叫的時候,我們需要把這些函式專門的放在一塊,作為庫來被關鍵程式碼所呼叫,這個就是lib資料夾。如下:我們把atm中的logger函式放在commont模組中。
至此,我們的程式就完成建立成功了,接下來,我們來解釋一下怎麼使這個程式執行起來呢?
第一步:程式啟動入口的設定:
我們之前是在atm檔案中呼叫了run函式,既然我們要把啟動檔案設定在bin目錄下,那麼我們的當然不能在atm中呼叫函數了,我們需要把bin目錄下的start檔案當成執行檔案去呼叫我們需要的功能。
問題思考: 當我們把start檔案當成執行檔案之後,sys.path中的新增的路徑就是bin目錄了, 那當我們想要去呼叫core下面的atm函式的時候應該怎麼去匯入模組呢? 問題的解決: 我們需要把當前執行檔案的目錄的上一層目錄給新增到環境變數中 操作方法:start.py檔案內容 import sys, os # 獲得當前目錄的上一層的路徑 BASE_DIR = os.path.dirname(os.path.dirname(__file__)) # 新增到環境變數中,這樣我們就可以匯入剛剛建立的目錄了 sys.path.append(BASE_DIR) # 匯入核心程式碼中的atm模組 import core.atm core.atm.run()
第二步:核心程式碼程式中的變數匯入
atm.py檔案的修改 在第一行匯入settings配置檔案 from conf.setttings import *
第三步:配置資訊的更正
setttings.py的配置資訊 因為我們之前的移動過使用者檔案和日誌檔案 更改路徑: # 使用者只需要更改此處的路徑,不需要更改原始碼中的路徑 USER_FILE_PATH = r'H:\python_study\day19\測試\db\userinfo' LOG_FILE_PATH = r'H:\python_study\day19\測試\log\log.txt'
重新執行start檔案發現可以執行了檔案,有人可能會說,就這幾行的程式碼有必要搞得這麼麻煩嗎?這個原因是因為我們只是寫了這樣一個簡單的程式碼來進行舉例,如果我們的專案本來就很大,如果我們不進行結構化的整理,那麼對於程式碼的書寫以及程式碼的維護都將是一個非常困難的事情。所以以後寫程式碼還是最好按照一定的程式碼結構來整理會相對來說好一點。
問題六:我們應該把這些目錄建立成包還是目錄呢?
結論:
建立的結構都不建議建立成包。包一般都放在lib目錄下面