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("报错信息")