根据django中间件配置,建立本身项目的中间件,实现功能的可插拔式设计python
参考 django 中间件django
参考 django restframeworkapi
# @Author :SkyOcean # @File :notify.py def send_msg(content): print('短息通知%s' % content) def send_emil(content): print('邮箱通知%s' % content) def send_wechat(content): print('微信通知%s'% content)
# @Author :SkyOcean # @File :run.py from low.notify import * def run(content): send_msg(content) send_emil(content) send_wechat(content) run('今天放假')
建立一个notify文件夹微信
文件夹内容ui
# @Author :SkyOcean # @File :msg.py class Email(object): def __init__(self): pass#前提准备,一些密钥,一些配置 def send(self, content): print('邮件通知%s' % content)
# @Author :SkyOcean # @File :msg.py class Msg(object): def __init__(self): pass#前期准备,链接接口,配置密钥,api,参数等 def send(self,content): print('短信通知%s'%content)
# @Author :SkyOcean # @File :msg.py class WeChat(object): def __init__(self): pass#前提zui'bei def send(self, content): print('微信通知%s' % content)
# @Author :SkyOcean # @File :__init__.py import settings import importlib def send_all(content): for module_path in settings.NOTIFY_LIST: module, class_name = module_path.rsplit('.',maxsplit=1) # module = 'notify.email' class_name = 'Email' mod = importlib.import_module(module) # mod就是模块名 # from notify import email cls = getattr(mod,class_name) # 利用反射 获取到模块中类的变量名 obj = cls() obj.send(content)
# @Author :SkyOcean # @File :settings.py NOTIFY_LIST=[ 'notify.email.Email', 'notify.msg.Msg', 'notify.wechat.WeChat', ]
# @Author :SkyOcean # @File :run.py import notify notify.send_all('今天很开森')
能够将字符串进行拆分设计
import importlib mod = importlib.import_module('notify.email' ) 这个时候就是将notify.email 拆分红 from notify import email mod这个时候就等于email 它能够点email内部的全部方法 通常的使用 cls=attr(mod,'Email') 从mod模块内部获取Email类 这个时候cls就是Eail类 而后能够初始化 obj=cls()获取对象 用对象点取类中的方法等。