Python 实现抽象类的两种方式+邮件提醒+动态导入模块+反射(参考Django中间件源码)
2017-12-28 19:56
946 查看
实现抽象类的两种方式
方式一
from abc import ABCMeta from abc import abstractmethod class BaseMessage(metaclass=ABCMeta): @abstractmethod def send(self,subject,body,to,name): pass
方式二
class BaseMessage(object): def send(self, subject, body, to, name): raise NotImplementedError('未实现send方法')
邮件提醒
import smtplib from email.mime.text import MIMEText from email.utils import formataddr from .base import BaseMessage class Email(BaseMessage): def __init__(self): self.email = "寄件人的邮箱地址" self.user = "寄件人姓名" self.pwd = '邮箱密码或SMTP授权码' def send(self,subject,body,to,name): ''' :param subject: 主题 :param body: 内容 :param to:接受者 :param name:接受者姓名 :return: ''' msg = MIMEText(body, 'plain', 'utf-8') # 发送内容 msg['From'] = formataddr([self.user,self.email]) # 发件人 msg['To'] = formataddr([name, to]) # 收件人 msg['Subject'] = subject # 主题 server = smtplib.SMTP("smtp.126.com", 25) # SMTP服务 server.login(self.email, self.pwd) # 邮箱用户名和密码 server.sendmail(self.email, [to, ], msg.as_string()) # 发送者和接收者 server.quit()
动态导入模块+反射
settings
# ################## 自定义消息提醒的配置 ################### MESSAGE_CLASSES = [ 'utils.message.email.Email', 'utils.message.msg.Msg', 'utils.message.wx.WeChat', 'utils.message.dingding.DingDing', ]
import importlib from django.conf import settings def send_message(to,name,subject,body): """ 短信、邮件、微信 :param to: 接受者 :param name: 接受者姓名 :param subject: 主题 :param body: 内容 :return: """ for cls_path in settings.MESSAGE_CLASSES: # cls_path是字符串 module_path,class_name = cls_path.rsplit('.',maxsplit=1) # 得到模块名的地址和模块里的一个类名(都是字符串) m = importlib.import_module(module_path) # 导入模块 obj = getattr(m,class_name)()·# 通过反射,得到字符串class_name对应的类,并实例化 obj.send(subject,body,to,name,) # 执行对应的send方法
相关文章推荐
- 从Python的两种导入模块(from import和import)方式谈命名空间与作用域
- 在python中实现动态导入模块importlib.import_module
- Python:使用threading模块实现多线程编程二[两种方式起线程]
- Python:使用threading模块实现多线程编程二[两种方式起线程]
- React组件导入的两种方式(动态导入组件的实现)
- Python导入模块(包)的两种方式 TypeError: 'module' object is not callable
- Python:使用threading模块实现多线程编程二[两种方式起线程]
- python导入模块的两种方式
- python模块的导入的两种方式区别详解
- Android-动态加载插件化的两种实现方式(一):反射
- python 知识点:反射 之 getattr()实现以字符串形式导入模块和执行函数
- 在python中实现动态导入模块importlib.import_module
- python中package机制的两种实现方式
- [转]Python动态导入模块
- python中package机制的两种实现方式
- python动态导入模块、判断模块是否已安装
- 实现OWA 2010通过短信方式发送邮件提醒功能
- python中package机制的两种实现方式
- spring实现AOP的两种方式以及实现动态代理方式
- 两个Repeater嵌套实现动态菜单(ado.net+sql和xml+Linq两种读取数据方式)