zoukankan      html  css  js  c++  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()获取对象
     用对象点取类中的方法等。
    
  • 相关阅读:
    根据汉字获取其的首个字母
    jqure获取单选按钮的值(比如性别)
    dataset 和DataTable的用法
    利用ExcelDataReader封装类 导入表格数据
    批量导入数据.net
    一个按下键盘触发事件的例子
    Build Error 6041: Internal build error
    Word 2010巧妙绘制各种分割线的方法(图文)
    vbscript multiple line syntax
    Update msi using vbscript
  • 原文地址:https://www.cnblogs.com/SkyOceanchen/p/11774052.html
Copyright © 2011-2022 走看看