根據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()獲取對象 用對象點取類中的方法等。