Python学习笔记:7.5.7 Django快速建站 - Web开发实战 微信公众号开发2

前言:本文是学习网易微专业的《python全栈工程师 - Django快速建站》课程的笔记,欢迎学习交流。同时感谢老师们的精彩传授!

一、课程目标

  • 实现消息回复
  • 利用测试公众号进行测试

二、详情解读

2.1.消息类型
2.1.1.回复的消息类型
  • 文本、语音、图片、图文
2.2.实现消息回复

Python学习笔记:7.5.7 Django快速建站 - Web开发实战 微信公众号开发2_第1张图片

2.2.1.基本步骤
  • 实现与微信服务器的连接:确定连接URL
  • 微信服务器以POST方式,通过URL,向开发者服务器转发用户提交的信息
  • 开发者服务器接收上述信息后,向微信服务器返回消息:以XML的形式
  • 微信服务器收到上述XML之后,将消息返回到用户端

实操一:

Step1: 创建应用wxmessage,并添加到wechat/wechat/settings.py

python manage.py startapp wxmessage
INSTALLED_APPS = [
    ......
    'wxmessage',
]

Step2: 启动上节课学的netapp.exe,并将域名添加到wechat/wechat/settings.py中的ALLOWED_HOSTS
Python学习笔记:7.5.7 Django快速建站 - Web开发实战 微信公众号开发2_第2张图片

# 比如我这里是这样的:
ALLOWED_HOSTS = ['sz242a.natappfree.cc',]

Step3: 添加路由
wechat/wechat/urls.py

from django.contrib import admin
from django.urls import path, include, re_path

urlpatterns = [
    path('admin/', admin.site.urls),   
    path('wxmessage/', include('wxmessage.urls', namespace='wxmessage')),
]

Step4: 新建应用的路由文件wechat/wxmessage/urls.py

# -*- coding=utf-8 -*-
from django.urls import path, re_path
from . import views

app_name = 'wxmessage'

urlpatterns = [
    re_path('^replytype/', views.send_message, name='send_message'),
]

Step5: 编辑wechat/wxmessage/views.py中的视图函数send_message

from django.http.response import HttpResponse
from django.views.decorators.csrf import csrf_exempt
from wechatpy import parse_message, create_reply
from wechatpy.exceptions import InvalidSignatureException
from wechatpy.utils import check_signature
from wechatpy.replies import ArticlesReply

AUTH_TOKEN = 'f0760e4300a684b6' # 来自natapp.cn,如果不使用内网穿透,可以自己定义

@csrf_exempt
def send_message(request):
    if request.method == 'GET':     # 验证 url
        signature = request.GET.get('signature', '')
        timestamp = request.GET.get('timestamp', '')
        nonce = request.GET.get('nonce', '')
        echo_str = request.GET.get('echostr', '')
        try:
            check_signature(AUTH_TOKEN, signature, timestamp, nonce)
        except InvalidSignatureException:
            echo_str = 'error'
        response = HttpResponse(echo_str, content_type='text/plain')
        return response
    elif request.method == 'POST':   # 接收微信服务器发来的信息
        msg = parse_message(request.body)
        if msg.type == 'text':
            reply = create_reply('搜索问答技术的公众号:老齐教室', msg)
            # reply = ArticlesReply(message=msg)
            # reply.add_article({
            #     'title': '老齐教室',
            #     'description': '搜索技术问答的公众号。/n你在这个公众号里,还能阅读到很多优秀的技术文章,看到公开课。',
            #     'image': 'https://public-tuchuang.oss-cn-hangzhou.aliyuncs.com/officialaccounts_20200311104512.png',
            #     'url': 'https://itdiffer.com'
            # })
        elif msg.type == 'image':
            reply = create_reply('你刚才发给我的是一张图片', msg)
        elif msg.type == 'voice':
            reply = create_reply('你刚才发给我的是语音', msg)
        else:
            reply = create_reply('这是条其他类型消息', msg)
        response = HttpResponse(reply.render(), content_type='application/xml')  # reply.render() 生成 xml
        return response
    else:
        logger.info('--------------------')

Step6: 在上节课的测试公众号里填写路由http://sz242a.natappfree.cc/wxmessage/replytype/,这里内网穿透的域名会跟小编的不一样,要注意。
Python学习笔记:7.5.7 Django快速建站 - Web开发实战 微信公众号开发2_第3张图片
url填写好了之后,点击“提交”。此处注意本地的项目服务器要运行着。下图表示配置成功
Python学习笔记:7.5.7 Django快速建站 - Web开发实战 微信公众号开发2_第4张图片
Step7: 测试上面的功能是否实现了。用手机微信扫描测试二维码
Python学习笔记:7.5.7 Django快速建站 - Web开发实战 微信公众号开发2_第5张图片
测试结果如下图所示:
Python学习笔记:7.5.7 Django快速建站 - Web开发实战 微信公众号开发2_第6张图片
图文消息测试结果:
Python学习笔记:7.5.7 Django快速建站 - Web开发实战 微信公众号开发2_第7张图片
更多关于微信公众号的用法,可以参考官方文档:https://docs.wechatpy.org/zh_CN/master

三、课程小结

  • 01 微信公众号的消息类型
  • 02 开发者服务器接收和返回消息

你可能感兴趣的:(Python全栈工程师学习笔记)