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'] == '':
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) + '\n'
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'感谢您关注【微人人公众号】\n目前功能如下:【1】 库存查询;')
return resultStr

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

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

22.3. 小结

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

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

Python开发入门与实战22-简单消息回复的更多相关文章

  1. Python开发入门与实战13-基于模板的界面

    13. 基于模板的界面 本章我们将继续基于库存的简单例子来阐述如何在python django中体现MVC的架构,根据djangobook说明: M:数据存取部分,由django数据库层处理,本章要讲 ...

  2. Python开发入门与实战1-开发环境

    1.搭建Python Django开发环境 1.1.Python运行环境安装 Python官网:http://www.python.org/ Python最新源码,二进制文档,新闻资讯等可以在Pyth ...

  3. Python开发入门与实战8-基于Java的集成开发环境

    8. 基于Java的Python的集成开发环境 目前为止我们所有的代码和例子都是通过Notepad文本编辑器来实现的,实际项目开发中这种编码模式效率较低(大虾除外),使用IDE集成开发环境常常大幅度的 ...

  4. Python开发入门与实战5-django模型

    5.Django模型 在当今的Web 应用中,主观逻辑经常牵涉到与数据库的交互,数据库驱动网站.在后台连接数据库服务器,从中取出一些数据,然后在 Web 页面用各种各样的格式展示这些数据.这个网站也可 ...

  5. Python开发入门与实战2-第一个Django项目

    2.第一个Django项目 上一章节我们完成了python,django和数据库等运行环境的安装,现在我们来创建第一个django project吧,迈出使用django开发应用的第一步. 2.1.创 ...

  6. Python开发入门与实战20-微信开发配置

    随着移动互联网时代的来临,微信已经成为移动互联网移动端的主要入口,现在很多的大型企业都有自己的微信服务号,如:银行业有自己的微银行,基金公司的公众服务号.通过微信入口可以方便快速的实现企业提供的服务. ...

  7. Python开发入门与实战19-Windows Azure web 应用部署

    19. 微软云web应用部署 上一章节我们介绍了如何实现在微软云通过虚拟机部署我们的在python django应用,本章我们来介绍如何Windows Azure上部署通过部署网站的方式来部署我们的应 ...

  8. Python开发入门与实战12-业务逻辑层

    12. Biz业务层 前面的章节我们把大量的业务函数都放在了views.py里,按照目前这一的写法,当我们编写的系统复杂较高时,我们的views.py将会越来越复杂,大量的业务函数包含其中使其成为一个 ...

  9. Python开发入门与实战7-Django Form

    7. Django Form 7.1. Form表单 Django带有一个form库,称为django.forms,这个库可以处理上一章提到的包括HTML表单的自动生成以及数据验证. 我们在inven ...

随机推荐

  1. Linux下LVM

    http://www.cnblogs.com/xiaoluo501395377/archive/2013/05/22/3093405.html

  2. [教程] [承風雅傳HSU]用ES4封裝Win7---ES4 Win7封裝教程(未完待續)

    [教程] [承風雅傳HSU]用ES4封裝Win7---ES4 Win7封裝教程(未完待續) a10036it 发表于 2015-7-27 21:11:19 https://www.itsk.com/t ...

  3. unity-点乘和叉乘的应用

    http://blog.csdn.net/oskytonight/article/details/38900087 点乘:两个向量点乘得到一个标量 ,数值等于两个向量长度相乘后再乘以二者夹角的余弦值 ...

  4. RDLC中添加参数,用来显示报表中数据集之外的信息。

    我添加了两个参数,首先后台: ReportParameter rp = ,,).ToString()); ReportParameter rp1 = new ReportParameter(" ...

  5. express+gulp构建项目(一)项目目录结构

    express是基于nodejs平台的web框架,它可以让我们快速开发出web引用.而gulp是一种自动构建工具,非常强大,有了它,能帮我们完成很多繁琐的工作,例如,静态文件的压缩,为静态文件加上哈希 ...

  6. linux 挂载光盘:mount: you must specify the filesystem type

    尝试挂载光盘镜像时出现mount: you must specify the filesystem type 使用-t auto -t iso9660 或不加参数都搞不定,最后在以下链接找到解决办法: ...

  7. ajax向后台传递数组

    $.ajax({ traditional: true//这个设置为true,data:{"steps":["qwe","asd"," ...

  8. tensorflow版的bvlc模型

    研究相关的图片分类,偶然看到bvlc模型,但是没有tensorflow版本的,所以将caffe版本的改成了tensorflow的: 关于模型这个图: 下面贴出通用模板: from __future__ ...

  9. IOS开发常见错误整理

    1.Cannot create an NSPersistentStoreCoordinator with a nil model 这是在执行到这段代码时引发的: - (void)viewDidLoad ...

  10. VPS/云主机 如何试用远程连接登录主机服务器_

    1.windows主机如何远程登录 点本地电脑开始>运行(或者按"window+R")>输入mstsc点确定 弹出远程连接的框输入IP连接,  如果是VPS,直接输入I ...