当前位置: 首页 > news >正文

Python 实现接口类的两种方式+邮件提醒+动态导入模块+反射(参考Django中间件源码)

实现抽象类的两种方式

方式一

from abc import ABCMeta
from abc import abstractmethodclass BaseMessage(metaclass=ABCMeta):@abstractmethoddef 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 BaseMessageclass 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方法

http://www.lryc.cn/news/95809.html

相关文章:

  • Solr原理剖析
  • 解决 “无法将 ‘npm‘ 项识别为 cmdlet、函数、脚本文件或可运行程序的名称“ 错误的方法
  • Python 电商API 开发最佳实践
  • JAVA基础-集合(List与Map)
  • 19 QListWidget控件
  • 手动安装docsify
  • yaml语法详解
  • ubuntu下tmux安装
  • ssh打开远程vscode
  • Socket发送数据---winsock库和boost库
  • Qt Core学习日记——第七天QMetaObject(上)
  • 100、用简洁的语言描述一下:TCP的三次握手和四次挥手(不需要长篇大论)
  • 中南大学硕士论文latex版本全指导
  • RFC8470在HTTP中使用早期数据
  • macOS Big Sur 11.7.9 (20G1426) 正式版 ISO、PKG、DMG、IPSW 下载
  • 【LeetCode】62.不同路径
  • 使用序列化和反序列化函数archivedDataWithRootObject和unarchivedObjectOfClasses的使用和遇到问题及解决方案
  • python获取鼠标出颜色
  • Github Flow工作流简单介绍(以部署为中心的开发模式)
  • selenium浏览器驱动下载
  • go学习 模块与包 - Init函数 - 如何导入第三方包 - 切片与数组的数据传递方式 - go中文件的读写
  • 2023第五届全国生物资源提取与应用创新论坛即将举办
  • Socks5代理在爬虫与HTTP应用中的重要性
  • 二叉树详解
  • Git的核心概念:探索Git中的提交、分支、合并、标签等核心概念,深入理解其作用和使用方法
  • JAVA设计模式——23种设计模式详解
  • Oracle输出文本平面(CSV、XML)文本数据详细过程
  • 基于C++的QT基础教程学习笔记
  • 【数据分享】全国地级市1999—2020年工业企业数(Shp/Excel格式)
  • 设计模式【行为型】-- 责任链模式