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方法
不用更改业务逻辑代码