重要的编程思想--配置文件

目录结构:

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)
email.py
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)
sms.py
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)
wechat.py

三个文件同时继承了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 -

  

 

posted @ 2019-01-28 11:19  我在地球凑人数的日子  阅读(148)  评论(0)    收藏  举报