django+sae微信开发-简单的鹦鹉学舌功能

转自个人博客:http://ningning.today/2015/02/09/python/django-sae%E5%BE%AE%E4%BF%A1%E5%BC%80%E5%8F%91%EF%BC%8D%E7%AE%80%E5%8D%95%E7%9A%84%E9%B9%A6%E9%B9%89%E5%AD%A6%E8%88%8C%E5%8A%9F%E8%83%BD/

网上已经有一些优秀的教程了,但是大多数基于web.py,最近学了点django,就用django写个简单的demo。


准备工作

基础的python知识,基础的django框架知识。

申请sae,申请微信公众平台。看一下sae和微信平台开发文档。

可以参考以下几个教程有个大致的了解:(包括申请sae,微信平台,url设置等步骤)

使用python一步一步搭建微信公众平台(一)

利用SAE搭建微信公众平台(二)微信的验证和自动回复

微信机器人:小蜗牛有道翻译小助手——Django + SAE + 微信公众帐号自动回复开放接口


建立项目及配置

建立项目:django-admin.py startproject
mysite

按照sae要求更名为版本1:move mysite 1

编写配置文件:config.yaml

1

2

3

4

5

6
libraries:

- name: "django"

version: "1.4"

- name: lxml

version: "2.3.4"

编写index.wsgi:

1

2

3

4
import sae

from mysite import wsgi

application = sae.create_wsgi_app(wsgi.application)

这时候文件夹1下应该有4个文件(夹):

config.yaml index.wsgi manage.py mysite

切换到mysite文件夹下,建立一个templates文件夹:

cd mysite; mkdir templates

修改settings.py:

1

2

3

4

5

6
TIME_ZONE = ‘Asia/Shanghai‘

LANGUAGE_CODE = ‘zh-cn‘

# 添加模板文件夹

TEMPLATE_DIRS = (

‘./mysite/templates‘,

)

编写views.py

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51
# -*- coding: utf-8 -*-

from django.http import HttpResponse

import hashlib

import time

import os

import urllib2,json

from lxml import etree

from django.views.generic.base import View

from django.shortcuts import render

class WeixinInterfaceView(View):

def get(self, request):

#得到GET内容

signature = request.GET.get(‘signature‘, None)

timestamp = request.GET.get(‘timestamp‘, None)

nonce = request.GET.get(‘nonce‘, None)

echostr = request.GET.get(‘echostr‘, None)

#自己的token

token = ‘yourtoken‘ #这里改写你在微信公众平台里输入的token

#字典序排序

tmpList = [token, timestamp, nonce]

tmpList.sort()

tmpstr = ‘%s%s%s‘ % tuple(tmpList)

#sha1加密算法

tmpstr = hashlib.sha1(tmpstr).hexdigest()

#如果是来自微信的请求,则回复echostr

if tmpstr == signature:

return render(request, ‘get.html‘, {‘str‘: echostr},

content_type=‘text/plain‘)

def post(self, request):

str_xml = request.body.decode(‘utf-8‘)    #use body to get raw data

xml = etree.fromstring(str_xml)    #进行XML解析

toUserName = xml.find(‘ToUserName‘).text

fromUserName = xml.find(‘FromUserName‘).text

createTime = xml.find(‘CreateTime‘).text

msgType = xml.find(‘MsgType‘).text

content = xml.find(‘Content‘).text   #获得用户所输入的内容

msgId = xml.find(‘MsgId‘).text

return render(request, ‘reply_text.xml‘,

{‘toUserName‘: fromUserName,

‘fromUserName‘: toUserName,

‘createTime‘: time.time(),

‘msgType‘: msgType,

‘content‘: content,

},

content_type = ‘application/xml‘

)

在这里使用了视图类,实现了get和post方法来处理这两种请求。get方法用来验证,验证方法在微信开发文档里有描述。post方法实现消息回复,xml解析得到相应内容,xml内容详见微信开发文档,需要严格按照格式回复。


编写templates:

进入mysite里的templates文件夹,建立两个模版文件get.html和reply_text.xml:

get.html内容很简单,直接定义一个变量str就可以:{{ str }}

在views.py的get方法里,

return render(request, ‘get.html‘,
{‘str‘: echostr}, content_type=‘text/plain‘)

render后str会被替换成echostr返回。

reply_text.xml:

在这个xml模版里定义了一些变量,然后我们在post方法里使用这个模板,实际上也就是文档里定义的xml文件,把需要替换的地方用自己定义的变量替换。然后在render方法里,把变量替换为需要的信息,我们把’content’: content直接用content返回,就可以直接回复收到的内容。

1

2

3

4

5

6

7

8

9
return render(request, ‘reply_text.xml‘,

{‘toUserName‘: fromUserName,

‘fromUserName‘: toUserName,

‘createTime‘: time.time(),

‘msgType‘: msgType,

‘content‘: content,

},

content_type = ‘application/xml‘

)

编写urls.py

1

2

3

4

5

6

7
from django.conf.urls import patterns, include, url

from mysite.views import WeixinInterfaceView

from django.views.decorators.csrf import csrf_exempt    #remove csrf

urlpatterns = patterns(‘‘,

url(r‘^weixin/‘, csrf_exempt(WeixinInterfaceView.as_view())),

)

在这里用csrf_exempt方法去除csrf验证。

本机调试

用curl这个命令发送post请求

curl -X POST -d @post.xml http://127.0.0.1:8000/weixin/
> result.html

curl的用法可以自行搜索,post.xml就是我们要发送的xml文件,格式参考微信开发文档。把结果重定向到一个result.html文件里边,用浏览器打开就可以查看是什么错误了。


部署

可以使用svn直接commit到sae上即可。

时间: 2024-08-07 00:12:40

django+sae微信开发-简单的鹦鹉学舌功能的相关文章

django+python微信开发

django+python微信开发之一-准备工作 django+python微信开发之二-封装消息类 django+python微信开发之三-消息处理类 django+python微信开发之四-最后的工作:消息服务类

微信开发-PC调试-JS-SDK功能之分享功能调试

一般涉及和第三方的开发调试,都会比较麻烦些.不过,像微信这样的大公司呢,产品技术是过硬的,所以,基本上只要自己把文档看仔细了,弄好了,基本就没有问题了. 对于后端接口一类的调试,主要就是通过打印访问日志的方式,进行一步步排查,常见的错误官方文档也有提示,仔细找找就能发现问题. 本文主要讲解js-sdk的调试方式,因此就不说后台接口的问题了. js-sdk的调试难点在于,在手机上的调试,无法监控各种传输状态,由于是js类的操作,也不方便打印日志什么的. 不过幸好,微信官方提供了一个pc版本的调试工

php微信开发实现自定义菜单功能

首先说一下遇到的坑吧! 01我用的测试公众号,说好的有接口权限,结果呢,微信留了个坑,返回错误代码 48001 一查错误码 微信文档这样写:api功能未授权,请确认公众号已获得该接口,可以在公众平台官网-开发者中心页中查看接口权限 懵逼了吧! 半信半疑中,我果断换了认证过的服务号,一测试OK了 02代码的开头有空格也会报错,跟tp的机制有关,我的代码在tp下面. 03 调用接口的链接为https,结果我的服务器可能验证证书出错,最后找了半天才找到一种解决办法,就是在使用curl的部分使用如下代码

用django做微信开发

调用了图灵机器人的接口,但微信开发出现了问题,后台用的django,但response怎么也返回不到微信客户端,又不知道该怎么debug.在这里贴出urls.py和views.py,希望有高人可以帮我找找茬. urls.py from django.conf.urls import patterns, include, url from littesnail.views import handleRequest urlpatterns = patterns('', # Examples: url

使用Flex 和 Red5开发简单视频直播功能

Flex 是一个高效.免费的开源框架,可用于构建具有表现力的 Web应用程序,这些应用程序利用Adobe Flash Player和Adobe AIR, 可以实现跨浏览器.桌面和操作系统.虽然只能使用 Flex 框架构建 Flex应用程序,但Adobe Flash Builder™(之前称为 Adobe Flex Builder™)软件可以通过智能编码.交互式遍历调试以及可视设计用户界面布局等功能加快开发. 使用 Flex 创建的 RIA 可运行于装有 Adobe Flash Player 插件

微信开发扫一扫功能并且屏蔽分享菜单

1.引入JS <script language="javascript" type="text/javascript" src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js"></script> 2.代码 用到微信的这3个接口'translateVoice', 'scanQRCode', 'hideMenuItems' 屏蔽  分享到朋友圈 分享给朋友 发送给QQ好友 发送给

微信开发简单例子

<?php /* http://fanyi.youdao.com/openapi.do?keyfrom=weifan&key=791593512&type=data&doctype=<doctype>&version=1.1&q=要翻译的文本 方倍工作室 http://www.cnblogs.com/txw1958/ CopyRight 2013 www.doucube.com All Rights Reserved */ traceHttp();

C#开发微信门户及应用(25)-微信企业号的客户端管理功能

我们知道,微信公众号和企业号都提供了一个官方的Web后台,方便我们对微信账号的配置,以及相关数据的管理功能,对于微信企业号来说,有通讯录中的组织架构管理.标签管理.人员管理.以及消息的发送等功能,其中微信企业号的组织架构和标签可以添加相应的人员,消息发送可以包含文本.图片.语音.视频.图文.文件等内容.对于企业号来说,官方的接口几乎可以无限的发送消息,因此构建一个管理后台,管理企业号的人员,以及用来给企业成员发送消息就是一个很好的功能亮点,有时候可以提高我们企业内部的消息通讯效率和日常工作管理效

微信开发python+django两个月的成功经历,django是个好框架!

时间:大三 上学期没有用微信内置浏览器而纯对话开发,坑了自己好一下. 下学期选错bottle框架,以为轻量好,谁知开发中什么都自己来很痛苦. 选对了框架django,终于在大三最后的个把月里写出了里程碑式的现在这个微信端,自己都感动到,作为我大三一年web开发的终结吧. 亮点1:自带后台管理 亮点2:后台权限管理 亮点3:微信回复规则设置去代码化,图形界面. 亮点4:一平台多网店 技巧:微信规则不匹配时不能回复吗?不是,规则包含空字符总能匹配任意文本,请看下面的微信规则截图. 后台 选择botl