在可插拔settings的基础上加入类似中间件的设计

在可插拔settings的基础上加入类似中间件的设计

settings可插拔设计可以看之前的文章

https://www.cnblogs.com/zx125/p/11735505.html

设计思路

实现和Django中间件类似的功能,可以在settings中通过简单的添加和删除配置就能,操作中间件是否执行的功能

文件目录

--about_settings
  --default
    --conf
      --__init__.py
      --global_settings.py 默认配置文件
  --notify
    --__init__.py
    --email.py
    --msg.py
    --wechat.py
  --user
    --settings.py        用户配置文件
  --start.py             启动文件

__init__.py

import importlib

def send_all(settings,content):
    for module_path in settings.NOTIFY_LIST:#遍历配置里面的字符串
        module, class_name = module_path.rsplit('.',maxsplit=1)#切割出包,和类名
        mod = importlib.import_module(module)#获取模块对象
        cls_obj = getattr(mod,class_name)#反射获取类对象
        cls_obj().send(content)#实例化对象,并执行指定方法

email,msg,wechat

鸭子类型,多个类有共同的方法

class Email():
    def __init__(self):
        pass
    def send(self,content):
        print(content)
        
class Msg():
    def __init__(self):
        pass
    def send(self,content):
        print(content)
        
class Msg():
    def __init__(self):
        pass
    def send(self,content):
        print(content)

start.py

import os
import sys
import notify

BASE_DIR = os.path.dirname(__file__)
sys.path.append(BASE_DIR)

os.environ.setdefault('settings','user.settings')
from default.conf import settings

notify.send_all(settings,"大家好")

猜你喜欢

转载自www.cnblogs.com/zx125/p/11774724.html