建立自我項目的中間件的思想

根據django中間件配置,建立本身項目的中間件,實現功能的可插拔式設計python

參考 django 中間件django

參考 django restframeworkapi

建立中間件的思想

開始的比較low的版本

# @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('今天很開森')

補充importlib模塊

能夠將字符串進行拆分設計

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()獲取對象
 用對象點取類中的方法等。
相關文章
相關標籤/搜索