zoukankan      html  css  js  c++  java
  • Python开发入门与实战22-简单消息回复

    22. 简单消息回复

    本章节我们来实现一个微信库存查询功能,使用我们前面的BIZ业务逻辑层示例如何利用微信入口来实现文本消息类的库存查询服务。

    22.1. 在responseMsg函数里增加处理微信文本推送的处理逻辑

    def responseMsg(postContent):
        postStr = smart_str(postContent)
        #postStr = postContent
        if postStr:
            msg = xmlContent2Dic(postStr)
            if msg['MsgType']:
                if msg['MsgType'] == 'event':
                    resultStr = handleEvent(msg)  #处理事件类型推送
                elif msg['MsgType'] == 'text':
                    resultStr =handleText(msg)    #处理文本类型推送
            else:
                resultStr = 'Input something...'    
    
        return resultStr

    22.2. 增加handleText函数,处理微信推送的文本信息逻辑

    def handleText(msg):
        resultStr="<xml><ToUserName><![CDATA[%s]]></ToUserName><FromUserName><![CDATA[%s]]></FromUserName><CreateTime>%s</CreateTime><MsgType><![CDATA[%s]]></MsgType><Content><![CDATA[%s]]></Content></xml>"
    
        if msg['Content'] == '1':
            resultStr = resultStr % (msg['FromUserName'],msg['ToUserName'],str(int(time.time())),'text',u'请输入查询物料名称,格式“K螺母”。')   
        elif string.upper(msg['Content'][0])=='K':
            itemName = msg['Content'][1:len( msg['Content'])]   
            strs = ''
            biz = InventoryBiz()
            inventorys = biz.getInventoryByItemName(itemName)
            for inventory in inventorys:
                strs = strs + inventory.Item.ItemName + u' 库存数量:' + str( inventory.Amount) + '
    '    
            if   strs == '':
                strs = u'当前物料:"'+ itemName +u'"未查询到库存数据'             
    
            resultStr = resultStr % (msg['FromUserName'],msg['ToUserName'],str(int(time.time())),'text',strs)     
        else:
            resultStr = resultStr % (msg['FromUserName'],msg['ToUserName'],str(int(time.time())),'text',u'感谢您关注【微人人公众号】
    目前功能如下:【1】 库存查询;')  
        return resultStr

    注意:我们仍然是通过业务逻辑层的查询函数调用来获得库存信息,然后返回给“微信”的查询用户。代码只是调用了BIZ层接口,作为“微信”接口的开发人员不需要再考虑业务逻辑层具体的的逻辑实现。这样我们也可以把“微信”看做MVC里view的一种展现模式。

    代码更新到云,我们就可以在微信端进行库存查询了。如下图:

    image

    22.3. 小结

    本章节我们演示了库存查询是如何快速扩展到支持微信查询的,由于业务逻辑层的代码是共用的,也就意味着真正的库存查询的业务逻辑对于微信接口的开发人员来说就是一个黑盒,开发人员只管调用biz层接口就可以完成功能从网页查询到微信查询的扩展。

    进一步如果开发团队内部定义了自己的信息封装格式,微信端的库存查询与extjs网页端库存查询就可以统一调用一个服务接口。比如:前面我们发布的getInventoryByItemName服务,期返回json数据格式。这样客户端开发人员都可以不用知道服务端是如何实现的,只管调用服务即可。这样的编程模式就可以实现界面展示层与服务层开发的完全分离,进一步降低系统的耦合。统一的服务层来实现不同终端访问结果的一致性,提高系统的整体开发效率。

  • 相关阅读:
    (Java) LeetCode 44. Wildcard Matching —— 通配符匹配
    (Java) LeetCode 30. Substring with Concatenation of All Words —— 与所有单词相关联的字串
    (Java) LeetCode 515. Find Largest Value in Each Tree Row —— 在每个树行中找最大值
    (Java) LeetCode 433. Minimum Genetic Mutation —— 最小基因变化
    (Java) LeetCode 413. Arithmetic Slices —— 等差数列划分
    (Java) LeetCode 289. Game of Life —— 生命游戏
    (Java) LeetCode 337. House Robber III —— 打家劫舍 III
    (Java) LeetCode 213. House Robber II —— 打家劫舍 II
    (Java) LeetCode 198. House Robber —— 打家劫舍
    (Java) LeetCode 152. Maximum Product Subarray —— 乘积最大子序列
  • 原文地址:https://www.cnblogs.com/haozi0804/p/4794797.html
Copyright © 2011-2022 走看看