由django中间件引发的编程思想

由django中间件引发的编程思想

创建一个文件夹,把一个个功能写成一个个py文件,假如我们写一个消息通知,让qq, 微信,邮箱都能接收到,qq, 微信,邮箱就是一个个功能

aapp02文件夹下的qq.py

class Qq(object):
    def __init__(self):
        pass
    def send(self,content):
        print(f'QQ通知:{content}')

aapp02文件夹下的wechat.py

class Wechat(object):
    def __init__(self):
        pass
    def send(self,content):
        print(f'微信通知:{content}')

aapp02文件夹下的email.py

class Email(object):
    def __init__(self):
        pass
    def send(self,content):
        print(f'邮件通知:{content}')

aapp02文件夹下的__init__.py

import  settings
import importlib

def send_all(content):
    for path_str in settings.APP02_LIST:
        module_path ,class_name = path_str.rsplit('.',maxsplit=1) 
        module = importlib.import_module((module_path)) #1 利用字符串导入模块
        cls = getattr(module,class_name) # 2 利用反射获取类名
        obj =cls() # 3 生成类的对象
        obj.send(content)  # 4 利用鸭子类型直接调用send方法

settings.py:

APP02_LIST = [
    'aapp02.email.Email',
    'aapp02.qq.Qq',
    'aapp02.wechat.Wechat',

]

start.py

import aapp02
aapp02.send_all('下课了')

当我们添加或者删除一个功能的时候,只需要在seetings里面添加或注释掉就可以了.

posted @ 2020-06-08 17:53  小子,你摊上事了  阅读(128)  评论(0编辑  收藏  举报