django 中間件 設計思想
通過修改配置文件來添加修改功能,以flask爲例,假如要實現兩種消息發送方式,email和msg
先放文件目錄
message裏面的每一個py文件都對應一種消息發送方式,在__init__中 寫一個通用的send方式,通過讀取setting裏面列表,循環導入message文件夾的每一個類,然後執行類的send方法,都繼承base類是爲了限制必須實現send方法
email.py
from .base import Base
class Email(Base):
def __init__(self):
self.name = 'email'
def send(self):
print('email_send')
msg.py
class Msg():
def __init__(self):
self.name = 'message'
def send(self):
print('msg_send')
base.py
class Base():
def send(self):#必須 實現send方法
raise NotImplementedError
__init__.py
import setting
import importlib
def send_message():
for path in setting.MESSAGE:
m, c = path.rsplit('.', maxsplit=1)#模塊,類 分割出來
md = importlib.import_module(m) #導入模塊
obj = getattr(md, c)() #通過反射得到函數並實例化 反射就是通過字符串來執行函數
obj.send()
app.py
import flask
from util.message import send_message #只需要導入__init__中的send函數
import util.message.email
app = flask.Flask(__name__)
@app.route("/index")
def index():
send_message()#實現了 高內聚 低耦合, 通過讀取配置文件來增加功能,增加功能時更改配置文件,再寫一個類實現send方法即可
return "index"
app.run()
setting.py
MESSAGE = [
"util.message.email.Email",
"util.message.msg.Msg"
]
如果想要加入wechat方式,只需要在setting.py中加入一個str,然後在message中添加一個類實現send方法
不用更改業務邏輯代碼