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'] == '':
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-简单消息回复的更多相关文章
- Python开发入门与实战13-基于模板的界面
13. 基于模板的界面 本章我们将继续基于库存的简单例子来阐述如何在python django中体现MVC的架构,根据djangobook说明: M:数据存取部分,由django数据库层处理,本章要讲 ...
- Python开发入门与实战1-开发环境
1.搭建Python Django开发环境 1.1.Python运行环境安装 Python官网:http://www.python.org/ Python最新源码,二进制文档,新闻资讯等可以在Pyth ...
- Python开发入门与实战8-基于Java的集成开发环境
8. 基于Java的Python的集成开发环境 目前为止我们所有的代码和例子都是通过Notepad文本编辑器来实现的,实际项目开发中这种编码模式效率较低(大虾除外),使用IDE集成开发环境常常大幅度的 ...
- Python开发入门与实战5-django模型
5.Django模型 在当今的Web 应用中,主观逻辑经常牵涉到与数据库的交互,数据库驱动网站.在后台连接数据库服务器,从中取出一些数据,然后在 Web 页面用各种各样的格式展示这些数据.这个网站也可 ...
- Python开发入门与实战2-第一个Django项目
2.第一个Django项目 上一章节我们完成了python,django和数据库等运行环境的安装,现在我们来创建第一个django project吧,迈出使用django开发应用的第一步. 2.1.创 ...
- Python开发入门与实战20-微信开发配置
随着移动互联网时代的来临,微信已经成为移动互联网移动端的主要入口,现在很多的大型企业都有自己的微信服务号,如:银行业有自己的微银行,基金公司的公众服务号.通过微信入口可以方便快速的实现企业提供的服务. ...
- Python开发入门与实战19-Windows Azure web 应用部署
19. 微软云web应用部署 上一章节我们介绍了如何实现在微软云通过虚拟机部署我们的在python django应用,本章我们来介绍如何Windows Azure上部署通过部署网站的方式来部署我们的应 ...
- Python开发入门与实战12-业务逻辑层
12. Biz业务层 前面的章节我们把大量的业务函数都放在了views.py里,按照目前这一的写法,当我们编写的系统复杂较高时,我们的views.py将会越来越复杂,大量的业务函数包含其中使其成为一个 ...
- Python开发入门与实战7-Django Form
7. Django Form 7.1. Form表单 Django带有一个form库,称为django.forms,这个库可以处理上一章提到的包括HTML表单的自动生成以及数据验证. 我们在inven ...
随机推荐
- 当云遇见APP性能测试会怎样?
一个测试人员应该明白,无论是在云内部或是外部,对一个应用程序而言,需要进行测试的地方都是一样的.最终用户只关注的是一个无缺陷的高性能的应用程序,而不关心应用程序位于哪里.在大多数的云服务协议里,都会提 ...
- AngularJS select中ngOptions用法详解
AngularJS select中ngOptions用法详解 一.用法 ngOption针对不同类型的数据源有不同的用法,主要体现在数组和对象上. 数组: label for value in a ...
- SAP采购订单历史明细报表源代码(自己收藏)
SPAN { font-family: "Courier New"; font-size: 10pt; color: #000000; background: #FFFFFF } ...
- Oracle笔记二
一.数据库语言分类 二.DML之数据插入 把一个表中的数据查询出来插入另外一个表中. create table student(id number,name varchar2(20),age num ...
- MP3光标移动
#include<iostream> #include<string.h> using namespace std; int main() { int N; cin>&g ...
- java使用代理 html2canvas 截屏 将页面内容生成图片
1.html2canvas 生成图片简单又好用,但涉及到跨域就会出现问题,官方给出的解决办法是设置代理.基本原理就是在后端将图片的数据生成base64再返回给前端使用.使canvas画布分析元素的时候 ...
- 获取sql server数据库表结构
if exists (select 1 from sysobjects where name = 'sysproperties'and xtype = 'V')begin DROP VIEW s ...
- 实现View的移动的方法总结
btw:这篇博客的内容其实算是<Android开发艺术探索>的一篇读书笔记,在书本的知识上加了一点自己的理解,并用自己的话描述出来.<Android开发艺术探索>是一本不错的书 ...
- 通过form表单获取值
<!DOCTYPE html><html> <head> <meta charset="utf-8" /> <title> ...
- 关于offsetWidth,offsetHeight,offsetTop,offsetLeft和二维数组的声明
offsetWidth,offsetHeight,offsetTop,offsetLeft 为只读状态,返回的值是int形式 只读形式即不能通过修改其值的大小. 想要修改某元素的这些值的大小(widt ...