重要的编程思想--配置文件
目录结构:

app.py为主文件,其中导入模块send_msgs 来执行Message模块里面的__init__.py
from flask import Flask,request from demo.utils.Message import send_msgs # 执行Message模块里的__init__.py app = Flask(__name__) @app.route('/') def hello_world(): user = request.args.get('name') if user == 'admin': # 发送报警--短信、邮寄 send_msgs("内容") return 'Hello World!' if __name__ == '__main__': app.run()
接下来查看一下Message模块里面的__init__.py文件内容:
from demo import settings import importlib def send_msgs(msg): for path in settings.MSG_CONFIG: # m第一部分 utils.Message.email 模块 # c第二部分 Email m,c = path.rsplit('.',maxsplit=1) md = importlib.import_module(m) # 导入模块 【utils.Message.email】 obj = getattr(md,c)() # 实例化模块下的类 【Email】 obj.send(msg)
Message模块里面的__init__.py文件导入了模块demo目录下的settings.py,查看下settings文件内容:
MSG_CONFIG={ "utils.Message.email.Email", "utils.Message.sms.Sms", "utils.Message.wechat.Wechat", # 新增功能【拓展类】 }
settings文件为配置文件,我们接着看Message模块里面的__init__.py文件内容,执行了importlib模块,循环配置文件,分割每次循环的配置内容即分割为模块名和执行类,实例化执行类,执行类函数方法send(msg), 根据映射找到目录执行send(msg)的py文件

from .base import Base class Email(Base): """ 发送邮件类 """ def __init__(self): """ 初始化配置用户名信息等 """ self.username = 'xxx' self.password = 'xxx' def send(self,msg): """ 发送消息 :param msg: 消息内容 :return: """ print('发送邮件',msg)
from .base import Base class Sms(Base): """ 发送短信类 """ def __init__(self): """ 初始化配置用户名信息等 """ self.username = 'xxx' self.password = 'xxx' def send(self,msg): """ 发送消息 :param msg: 消息内容 :return: """ print('发送短信', msg)
from .base import Base class Wechat(Base): """ 拓展微信类 """ def __init__(self): """ 初始化配置用户名信息等 """ self.username = 'xxx' self.password = 'xxx' def send(self,msg): """ 发送消息 :param msg: 消息内容 :return: """ print('新增微信类',msg)
三个文件同时继承了Base类
class Base(object): def send(self,msg): raise NotImplementedError('必须有send方法才能执行!')
我们使用Base类来控制每个新增拓展的类方法必须含有send方法来调用
简单使用了Flask web框架执行测试,运行app.py,打开浏览器输入地址:http://127.0.0.1:5000/?name=admin
查看执行结果
H:\py_env\flask_env\Scripts\python.exe H:/PythonDemo/demo_flask/demo/app.py * Serving Flask app "app" (lazy loading) * Environment: production WARNING: Do not use the development server in a production environment. Use a production WSGI server instead. * Debug mode: off * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit) 发送短信 内容 发送邮件 内容 新增微信类 内容 127.0.0.1 - - [28/Jan/2019 10:52:34] "GET /?name=admin HTTP/1.1" 200 -

浙公网安备 33010602011771号