1. 程式人生 > 其它 >基於Django框架的程式設計思想

基於Django框架的程式設計思想

在Django框架中,我們可以看到,通過在settings檔案中的某個配置列表內新增上對應的字串,就相當於匯入了某個模組裡面的類功能,如下:

 

 

 從上圖中我們可以看出來,Django配置檔案中的字串其實就是某個模組功能,那麼,他是如何做到的,我們能不能像Django一樣通過字串來匯入模組呢??當然可以,在這之前,我們需要來了解一個模組功能:importlib

importlib

importlib就是可以通過字串來匯入模組,具體功能如下程式碼演示:

 1 '''
 2 設定一個myfile資料夾,資料夾內包含一個b.py檔案,
  myfile資料夾與當前檔案在同一層級
3 ''' 4
5 # 模組:importlib 6 import importlib 7 res = 'myfile.b' 8 ret = importlib.import_module(res) # from myfile import b 9 # 該方法最小隻能到py檔名 10 print(ret)

從上面的程式碼演示結果來看,我們就可以通過字串的形式匯入模組,下面,我們開始利用該模組功能來模擬Django的配置檔案程式設計思想。

Django配置檔案程式設計思想:

首先我們先建立如下圖所示的檔案:其中notify是一個包,包中包含了__init__.py 、email.py 、 qq.py 以及wechat.py等檔案,並在跟notify同一層級建立了settings.py和start.py兩個py檔案:

 

 檔案中的具體程式碼如下:

 1 '''
 2 基於Django的程式設計思想,在配置檔案的列表中配置字串,就可以匯入某個功能:
 3 目錄如下:
 4 notify資料夾
 5     __init__.py
 6     email.py
 7     qq.py
 8     wechat.py
 9 start.py
10 settings.py    
11 
12 '''
13 
14 # settings.py
15 import notify
16 
17 path_str = [
18     'notify.email.Email',
19     'notify.qq.QQ
', 20 'notify.wechat.Wechat', 21 'notify.msn.Msn', 22 ] 23 24 ******************************************************************* 25 # email.py 其他的qq/wechat同 26 class Email(object): 27 def __init__(self): 28 pass # 傳送qq前期需要的準備工作 29 30 def send(self,content): 31 print('郵箱傳送的訊息:%s' % content) 32 33 ******************************************************************* 34 # __init__.py 35 import settings 36 import importlib 37 38 def send_all(content): 39 for path_str in settings.NOTIFY_LIST: #'notify.email.Email' 40 module_path,class_name = path_str.rsplit('.',maxsplit=1) 41 # module_path = 'notify.email' class_name = 'Email' 42 # 1 利用字串匯入模組 43 module = importlib.import_module(module_path) # from notify import email 44 # 2 利用反射獲取類名 45 cls = getattr(module,class_name) # Email、QQ、Wechat 46 # 3 生成類的物件 47 obj = cls() 48 # 4 利用鴨子型別直接呼叫send方法 49 obj.send(content) 50 51 ****************************************************************** 52 53

這樣,我們只需要在start.py中傳入content引數,就可以通過qq / email / wechat等傳送訊息,如果不想使用某個功能,只需要去配置檔案中將對應的配置註釋掉即可,新增其他的功能時也一樣,我們只需要在notify包中將功能模組寫好,然後去配置檔案中配置相對應的配置資訊即可,這大大加強了我們程式的解耦合程度。