利用django+wechat-python-sdk 创建微信服务器接入的方法


Posted in Python onFebruary 20, 2019

1、版本说明 :python 2.7.10, Django (1.6.11.6),centos7

2、步骤说明:

A、django 建立项目

django-admin.py startproject projtest

之后启动服务器,看看是否正确:

cd projtest

配置 projtest子目录下面的setting.py文件,允许外部机器访问

[root@VM_4_128_centos projtest]# vim projtest/settings.py

把其中ALLOWED_HOSTS改成如下

ALLOWED_HOSTS = ['*']

然后启动,外部机器 看看能否访问到:

# python manage.py runserver 0.0.0.0:80

利用django+wechat-python-sdk 创建微信服务器接入的方法

B、创建应 用wechat

[root@VM_4_128_centos projtest]# python manage.py startapp wechat
 [root@VM_4_128_centos projtest]# ls
 manage.py projtest wetchat

C、安装wechat_sdk

[root@VM_4_128_centos projtest]# pip install wechat-sdk
Requirement already satisfied: wechat-sdk in /usr/lib/python2.7/site-packages
Requirement already satisfied: six==1.10.0 in /usr/lib/python2.7/site-packages (from wechat-sdk)
Requirement already satisfied: requests==2.6.0 in /usr/lib/python2.7/site-packages (from wechat-sdk)
Requirement already satisfied: pycrypto==2.6.1 in /usr/lib64/python2.7/site-packages (from wechat-sdk)
Requirement already satisfied: xmltodict==0.9.2 in /usr/lib/python2.7/site-packages (from wechat-sdk)

D、修改projtest/projtest/setting.py文件,加入应用

目录结构如下:

|-- manage.py
|-- projtest
|  |-- __init__.py
|  |-- __init__.pyc
|  |-- settings.py
|  |-- settings.pyc
|  |-- urls.py
|  |-- urls.pyc
|  |-- wsgi.py
|  `-- wsgi.pyc
`-- wetchat
  |-- __init__.py
  |-- admin.py
  |-- models.py
  |-- tests.py
  `-- views.py

vim projtest/settings.py

`-- wetchatINSTALLED_APPS = (
  'django.contrib.admin',
  'django.contrib.auth',
  'django.contrib.contenttypes',
  'django.contrib.sessions',
  'django.contrib.messages',
  'django.contrib.staticfiles',
  'wechat',
)

注:应用名称后面要有逗号

E、在wechat目录下,重写views.py文件,代码如下(参考网上例子):

#!/usr/bin/python
# -*- coding: utf-8 -*-
# Create your views here.
from django.shortcuts import render
from django.http import HttpResponse
from django.views.decorators.csrf import csrf_exempt
from django.views.generic.base import View
from django.template import loader, Context
 
from wechat_sdk import WechatBasic
token = 'zwbswx'
 
class WeChat(View):
 #这里我当时写成了防止跨站请求伪造,其实不是这样的,恰恰相反。因为django默认是开启了csrf防护中间件的
 #所以这里使用@csrf_exempt是单独为这个函数去掉这个防护功能。
 @csrf_exempt
 def dispatch(self, *args, **kwargs):
  return super(WeChat, self).dispatch(*args, **kwargs)
  
 def get(self, request):
  wechat = WechatBasic(token=token)
  if wechat.check_signature(signature=request.GET['signature'],
               timestamp=request.GET['timestamp'],
               nonce=request.GET['nonce']):
    if request.method == 'GET':
      rsp = request.GET.get('echostr', 'error')
    else:
      wechat.parse_data(request.body)
      message = wechat.get_message()
      rsp = wechat.response_text(u'消息类型: {}'.format(message.type))
  else:
    rsp = wechat.response_text('check error')
  return HttpResponse(rsp)

F、修改projtest/projtest/urls.py ,添加映射到微信应用(类似servlet)

[root@VM_4_128_centos projtest]# vim projtest/urls.py

from django.conf.urls import patterns, include, url
from django.contrib import admin
from wechat import views as wt_views ##增加本行
admin.autodiscover()
 
urlpatterns = patterns('',
  # Examples:
  # url(r'^$', 'projtest.views.home', name='home'),
  # url(r'^blog/', include('blog.urls')),
 
  url(r'^admin/', include(admin.site.urls)),
  url(r'^wechat', wt_views.WeChat.as_view()), ##增加本行
 
)

)

G、微信提交配置通过

05/Jun/2017 03:31:01] "GET /wechat?signature=8a75afb21cf821bbc4e2535119aa05be5c987112&echostr=13869464754252084605×tamp=1496633461&nonce=3957453572 HTTP/1.0" 301 0

[05/Jun/2017 03:31:01] "GET /wechat/?signature=8a75afb21cf821bbc4e2535119aa05be5c987112&echostr=13869464754252084605×tamp=1496633461&nonce=3957453572 HTTP/1.0" 200 20

以上这篇利用django+wechat-python-sdk 创建微信服务器接入的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
跟老齐学Python之字典,你还记得吗?
Sep 20 Python
python 把数据 json格式输出的实例代码
Oct 31 Python
浅析python中SQLAlchemy排序的一个坑
Feb 24 Python
Python用Pillow(PIL)进行简单的图像操作方法
Jul 07 Python
Python中执行存储过程及获取存储过程返回值的方法
Oct 07 Python
Python2.7 实现引入自己写的类方法
Apr 29 Python
Python DataFrame设置/更改列表字段/元素类型的方法
Jun 09 Python
python之文件读取一行一行的方法
Jul 12 Python
python实现图像检索的三种(直方图/OpenCV/哈希法)
Aug 08 Python
python两个_多个字典合并相加的实例代码
Dec 26 Python
详解pandas赋值失败问题解决
Nov 29 Python
Python万能模板案例之matplotlib绘制直方图的基本配置
Apr 13 Python
python3+pyqt5+itchat微信定时发送消息的方法
Feb 20 #Python
钉钉群自定义机器人消息Python封装的实例
Feb 20 #Python
python3实现zabbix告警推送钉钉的示例
Feb 20 #Python
python实现图书借阅系统
Feb 20 #Python
python 调用钉钉机器人的方法
Feb 20 #Python
python钉钉机器人运维脚本监控实例
Feb 20 #Python
Python实现钉钉发送报警消息的方法
Feb 20 #Python
You might like
PHP substr 截取字符串出现乱码问题解决方法[utf8与gb2312]
2011/12/16 PHP
PHP 文本文章分页代码 按标记或长度(不涉及数据库)
2012/06/07 PHP
php计划任务之验证是否有多个进程调用同一个job的方法
2015/12/07 PHP
Laravel网站打开速度优化的方法汇总
2017/07/16 PHP
Moment.js 不容错过的超棒Javascript日期处理类库
2012/04/15 Javascript
JS实现的省份级联实例代码
2013/06/24 Javascript
利用js实现遮罩以及弹出可移动登录窗口
2013/07/08 Javascript
JQuery结合CSS操作打印样式的方法
2013/12/24 Javascript
javascript数组快速打乱重排的方法
2014/01/02 Javascript
js动态改变select选择变更option的index值示例
2014/07/10 Javascript
Javascript原型链和原型的一个误区
2014/10/22 Javascript
javascript生成大小写字母
2015/07/03 Javascript
js实现的简洁网页滑动tab菜单效果代码
2015/08/24 Javascript
关于网页中的无缝滚动的js代码
2016/06/09 Javascript
AngularJS实现分页显示数据库信息
2016/07/01 Javascript
angularjs封装$http为factory的方法
2017/05/18 Javascript
JavaScript中常见的八个陷阱总结
2017/06/28 Javascript
Vue.js中extend选项和delimiters选项的比较
2017/07/17 Javascript
详谈for循环里面的break和continue语句
2017/07/20 Javascript
详解基于vue的服务端渲染框架NUXT
2018/06/20 Javascript
原生JS实现$.param() 函数的方法
2018/08/10 Javascript
使用xampp将angular项目运行在web服务器的教程
2019/09/16 Javascript
Python中对象的引用与复制代码示例
2017/12/04 Python
Python实现获取nginx服务器ip及流量统计信息功能示例
2018/05/18 Python
python使用__slots__让你的代码更加节省内存
2018/09/05 Python
python3实现猜数字游戏
2020/12/07 Python
如何使用django的MTV开发模式返回一个网页
2019/07/22 Python
详解Python并发编程之创建多线程的几种方法
2019/08/23 Python
使用keras根据层名称来初始化网络
2020/05/21 Python
使用SimpleITK读取和保存NIfTI/DICOM文件实例
2020/07/01 Python
Python threading模块condition原理及运行流程详解
2020/10/05 Python
关于iframe跨域使用postMessage的实现
2019/10/29 HTML / CSS
2016年教师政治思想表现评语
2015/12/02 职场文书
创业计划之特色精品店
2019/08/12 职场文书
Nginx开启Brotli压缩算法实现过程详解
2021/03/31 Servers
Centos系统通过Docker安装并搭建MongoDB数据库
2022/04/12 MongoDB