使用配置文件+反射实现
- 需要遵守:开放封闭原则
- 开放,针对配置开放
- 封闭,针对功能代码
目录结构
unicom- app.py- settings.py- utils - sms.py- wechat.py
#seetings.py里面代码
MESSAGE_LIST =["utils.sms.send","utils.wechat.send"
]
#sms.py
def send(msg):print("test2 发短信消息",msg)#wechat.py
def send(msg):print("test3 发wechat消息",msg)
# app.py里面代码
# 案例:三个人做项目开发
# test1,业务逻辑开发
# test2 发短信消息
# test3 发wechat消息
import importlibdef run():# 反射+ 工厂模式(配置文件settings)import seetings"""MESSAGE_LIST =["utils.sms.send","utils.wechat.send"
]"""print(seetings.MESSAGE_LIST)for path_string in seetings.MESSAGE_LIST:# 循环后,得到的字符串# print('utils.sms.send')# 表示从右开始找,找到第一个后进行切分 #得到结果是一个列表 ['utils.sms','send']md_path, func_name = path_string.rsplit(".", maxsplit=1) # 等于导入模块 from utils import smsmd = importlib.import_module(md_path) # from utils import sms as md 字符串的形式导入 utils.sms# 这样就找到了对应的函数,或者成员,然后执行func = getattr(md, func_name) func("CPU告警了")if __name__ == ("__main__"):run()
djogo模块,基于字符串模式导入