flask配置之反射

引子:

  django和flask,无论中间件还是其他地方,配置文件大量使用了反射

 

执行顺序

  request---flask.app.view--utils.__init__-----class 

 

优点

  体现了开放封闭原则,解耦合

 

代码

  flask.app

# -*- coding: utf-8 -*-


from flask import Flask,request
from utils import send_msgs


app=Flask(__name__)


@app.route('/uuuuu')
def index():
    data=request.args.get("age")
    # print(request.json.get("data"))
    print("ddddd",data)
    if data == '888':
        send_msgs(data)
    return "hello word"


if __name__ == '__main__':
    app.run()

  utils目录结构

 

 

  __init__.py

import flask_config_test
import importlib


def send_msgs(msg):
    for path in flask_config_test.MSG_LIST:
        m,c=path.rsplit(".",maxsplit=1)
        md=importlib.import_module(m)
        cls_obj=getattr(md,c)()
        print(cls_obj)
        cls_obj.send(msg)

  

  email.py

class EMAIL(object):
    def __init__(self):
        self.name="dsdf"
        self.pwd="dsfsdf"

    def send(self,info):
        pass

  msg.py

class MSG(object):
    def __init__(self):
        self.name = "dsdf"
        self.pwd = "dsfsdf"

    def send(self, info):
        pass

  base.py  作用类似于python的抽象类 用来约束 代码规范

class Base(object):
    def send(self,msg):
        raise NotImplementedError("报错信息")

  

 

posted @ 2021-02-02 23:16  Yuan_x  阅读(139)  评论(0编辑  收藏  举报