importlib应用 - django
背景
仿django的中间件的编程思想
用户可通过配置,选择是否启用某个组件/某个功能,只需要配置
eg:报警系统,发邮件,发微信 。。。
( 根据字符串导入模块, 利用反射找到模块下的类,实例化。执行 )
code
# settings.py NOTIFY_LIST = [
'notify.email.Email',
'notify.msg.Msg',
'notify.wechat.Wechat',
] ----------------------------- # app.py from notify import send_xxx def run():
send_xxx("报警") if __name__ == "__main__":
run() ---------------------------- # notify/__init__.py # 根据字符串 导入模块 import settings
import importlib def send_xxx(content):
for path in settings.NOTIFY_LIST:
# 'notify.email.Email',
# 'notify.msg.Msg',
# 'notify.wechat.Wechat',
module_path,class_name = path.rsplit('.',maxsplit=1)
# 根据字符串导入模块
module = importlib.import_module(module_path)
# 根据类名称去模块中获取类
cls = getattr(module,class_name)
# 根据类实例化
obj = cls()
obj.send(content) -----------------------------
# notify/email.py class Email(object):
def __init__(self):
pass def send(self,content):
print("email send..") # notify/msg.py class Msg(object):
def __init__(self):
pass def send(self,content):
print("msg send..")
# notify/wechat.py class Wechat(object):
def __init__(self):
pass def send(self,content):
print("wechat send..")
importlib应用 - django的更多相关文章
- django源码简析——后台程序入口
这一年一直在用云笔记,平时记录一些tips或者问题很方便,所以也就不再用博客进行记录,还是想把最近学习到的一些东西和大家作以分享,也能够对自己做一个总结.工作中主要基于django框架,进行项目的开发 ...
- Python 实现接口类的两种方式+邮件提醒+动态导入模块+反射(参考Django中间件源码)
实现接口类的两种方式 方式一 from abc import ABCMeta from abc import abstractmethod class BaseMessage(metaclass=AB ...
- Django - 补充目录
Django项目部署 importlib应用 - django contenttypes - django组件 Django - Model操作 Django - 用户认证.用户组.用户权限 Djan ...
- 框架----Django框架知识点整理
一.cbv cbv(class-base-view) 基于类的视图 fbv(func-base-view) 基于函数的视图 a.基本演示 urlpatterns = [ url(r'^login.ht ...
- Python 实现抽象类的两种方式+邮件提醒+动态导入模块+反射(参考Django中间件源码)
实现抽象类的两种方式 方式一 from abc import ABCMeta from abc import abstractmethod class BaseMessage(metaclass=AB ...
- 在Django中使用zerorpc
在Django中使用zerorpc 前言 随着系统架构从集中式单点服务器到分布式微服务方向的迁移,RPC是一个不可回避的话题.如何在系统中引入对开发者友好,性能可靠的RPC服务是一个值得深思的问题. ...
- statrc部分
statrc部分 1. 如何使用 #- 在app中编写 stark.py #- 在stark.py中进行定制 #- 默认配置: #site.register(models.UserInfo) #- 自 ...
- Python开发【模块】:内置模块
内置模块 1.__import__ # import app目录下的kingadmin.py文件 for app in conf.settings.INSTALLED_APPS: __import__ ...
- CRM客户关系管理系统知识点总结
一.项目需求(使用PrecessOn) 二.models.py from django.db import models from django.contrib.auth.models import ...
随机推荐
- R语言绘图边框的单位
在R语言中指定画图边框时,通常使用两种单位, lines 和 inches 当然,这两个单位之间是可以相互转换的,那么 1 inch = ? line 答案是1 inches = 5 lines 下面 ...
- 基于bootstrap的select(可多选)
如图:
- 记js的一个奇葩问题!!!!!!!!!!!!
<a id='gc-yl' onclick='Preview('" + imgPath + "')' style='margin-left:5px;' >预览</ ...
- javascript 哈夫曼树构造
function Node(data) { this.data = data; this.left = null; this.right = null; } Array.prototype.creat ...
- NLP入门相关——学习笔记
近义词.一词多义 GPT.ELMO.Bert
- require() 方法讲解
require.config({ paths:{ "jquery":"jquery.min", "underscore":"und ...
- NHibernate初学五之关联一对多关系
1:创建两张表T_Country.T_Person:其中T_Person表中有一个CountryID对应T_Country的ID,一个Country可以对应多个Person CREATE TABLE ...
- mybatis由浅入深day01_6SqlMapConfig.xml(6.2settings全局参数配置_6.3typeAliases(类型别名)_6.4typeHandlers(类型处理器)_6.5mappers(映射配置))
6 SqlMapConfig.xml mybatis的全局配置文件SqlMapConfig.xml,配置内容和顺序如下: properties(属性) settings(全局配置参数) typeAli ...
- HTML5开发之 -- 模态突出窗(bootstrap)
最近在学习web端开发相关,bootstrap非常好用! 有个模态弹出窗的效果,在此记录下: 1.导入: <script src="libs/js/jquery-3.2.1.min.j ...
- Android 4.0 Tabhost图标显示不出来
安卓4.0会有这个问题,修改Manifest.xml里面的Theme,找到System Resources,里面有Theme.black,选这个就行了.剩下自己要改背景色什么的这个还是比较easy的吧 ...