java 模块 可插拔_实现可插拔(一种思想)

根据django中间件配置,创建自己项目的中间件,实现功能的可插拔式设计

参考 django 中间件

参考 django restframework

创建中间件的思想

开始的比较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文件夹

文件夹内容

# @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()获取对象

用对象点取类中的方法等。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值