Django搭建微信公众平台详解 二

微信公众平台官方手册:http://mp.weixin.qq.com/wiki/home/index.html

Python版本:2.7.10

Django版本:1.5

开发平台:新浪SAE

前提:了解django基本创建应用的步骤。根据微信公众平台官方手册一步步完成。

公众号:今天做了没


获取access token:http://mp.weixin.qq.com/wiki/2/88b2bf1265a707c031e51f26ca5e6512.html

这一步其实在我这里没有使用,并且不影响继续开发,所以跳过,直接到接收文本和发送文本功能。

接收文本消息:

http://mp.weixin.qq.com/wiki/17/fc9a27730e07b9126144d9c96eaf51f9.html

发送文本消息:

http://mp.weixin.qq.com/wiki/18/c66a9f0b5aa952346e46dc39de20f672.html

 <xml>
 <ToUserName><![CDATA[toUser]]></ToUserName>
 <FromUserName><![CDATA[fromUser]]></FromUserName> 
 <CreateTime>1348831860</CreateTime>
 <MsgType><![CDATA[text]]></MsgType>
 <Content><![CDATA[this is a test]]></Content>
 <MsgId>1234567890123456</MsgId>
 </xml>

1. 读取上面这个消息结构中的内容,继续在第一节中的WeChat视图类中增加post方法

def post(self, request):
  #通过xml.etree.ElementTree.fromstring将接收到数据字符串转成xml
  str_xml = ET.fromstring(request.body)
  
  #从xml中读取我们需要的数据。注意这里使用了from接收的to,使用to接收了from,
  #这是因为一会我们还要用这些数据来返回消息,这样一会使用看起来更符合逻辑关系
  fromUser = str_xml.find('ToUserName').text
  toUser = str_xml.find('FromUserName').text
  content = str_xml.find('Content').text

那么其实我们这里就已经完成了读取用户发来的数据的功能,不过,我们光读取了还不够,我们还要有一些其它的功能,比如我们要返回给用户点什么。我们就返回"hello world"

<xml>
<ToUserName><![CDATA[toUser]]></ToUserName>
<FromUserName><![CDATA[fromUser]]></FromUserName>
<CreateTime>12345678</CreateTime>
<MsgType><![CDATA[text]]></MsgType>
<Content><![CDATA[你好]]></Content>
</xml>

2.返回给用户"hello world"

我这里使用了django的模板templates。在wechat目录创建目录templates/wechat,这里为什么还要在templates中再创建wechat呢?这个原因在django的官方文档中有说明。现在在templates/wechat下创建text.xml文件,并增加如下内容:

<xml>
<ToUserName><![CDATA[{{ toUser }}]]></ToUserName>
<FromUserName><![CDATA[{{ fromUser }}]]></FromUserName>
<CreateTime>{{ nowtime }}</CreateTime>
<MsgType><![CDATA[text]]</MsgType>
<Content><!CDATA[{{ content }}]]></Content>
</xml>

这里只是把文档中给出的回复消息的格式进行了一点处理。

下面我们继续在views.py中完善post方法:

def post(self, request):
  #通过xml.etree.ElementTree.fromstring将接收到数据字符串转成xml
  str_xml = ET.fromstring(request.body)
  
  #从xml中读取我们需要的数据。注意这里使用了from接收的to,使用to接收了from,
  #这是因为一会我们还要用这些数据来返回消息,这样一会使用看起来更符合逻辑关系
  fromUser = str_xml.find('ToUserName').text
  toUser = str_xml.find('FromUserName').text
  content = str_xml.find('Content').text
  
  #这里获取当前时间的秒数,time.time()取得的数字是浮点数,所以有了下面的操作
  nowtime = str(int(time.time()))
  
  #加载text.xml模板
  t = loader.get_template('wechat/text.xml')
  #将我们的数据组成Context用来render模板。
  c = Context({'toUser': toUser, 'fromUser': fromUser, 
               'nowtime': nowtime, 'content': 'hello world'})
               
  return HttpResponse(t.render(c))

有了上面的内容,基本上就可以进行扩展了,我是通过做点事来学习python和django框架,不过这个公众号我也会一直维护下去。

Django搭建微信公众平台详解 二







你可能感兴趣的:(django,python,微信公众平台,今天做了没)