利用 django+wechat-python-sdk 創建微信服務器接入

  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
           


             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&timestamp=1496633461&nonce=3957453572 HTTP/1.0" 301 0
[05/Jun/2017 03:31:01] "GET /wechat/?signature=8a75afb21cf821bbc4e2535119aa05be5c987112&echostr=13869464754252084605&timestamp=1496633461&nonce=3957453572 HTTP/1.0" 200 20



參考:

https://zhuanlan.zhihu.com/p/20543071

發佈了9 篇原創文章 · 獲贊 3 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章