Django+WeRobot实现自动回复众所周知,我创建了一个微信公众号,然后提供了一个功能,就是你写关键词,我就回复你内容对应关键字,那么今天就来说说这个功能是如何实现的。1.安装配置Django安装Django假设我们已经安装了Python,版本不是很重要。我这次用的是3.8.6版本,服务器上用的是3.6.9版本。Django是最新版本,这次主要参考Django的官方文档。#安装Djangopipinstalldjango创建Django项目#创建Django项目django-adminstartprojectmysite#项目创建完成后目录结构如下mysite/manage.pymysite/__init__.pysettings.pyurls.pyasgi.pywsgi.py#创建app,这个app不是另外一个app,而是一个具体的、完整的函数#startapp后面是一个app名称,这里我主要是做一个微信机器人,使用werobot框架#所以,名字是wrob,需要确定的是,这里的app名称不能和各种关键字重名pythonmanage.pystartappwrob#此时目录结构如下wrob/__init__.pyadmin.pyapps.pymigrations/__init__.pymodels.pytests.pyurls.pyviews.py2.安装werobotWeRoBot是一个基于MIT协议发布的微信公众号开发框架。开源地址:https://github.com/offu/WeRoBot文档地址:https://werobot.readthedocs.io/zh_CN/latest/installwerobotpipinstallwerobot3.改代码最后开始改代码1.修改views至于.py文件,简单来说,所有的功能都放在这里,所以根据werobot文档中与其他web框架的集成,修改view文件。#导入各种相关模块#第一个是数据库模型,后面还有一个文件要改,先说fromdjango.db.modelsimportModel#在这里创建你的视图#导入werobot模块fromwerobotimportWeRoBot#importDatabasemodel,这个后面会讲from.modelsimportshare#微信模块需要的各种基本认证信息可以在公众号的开发者板块获取COMPONENT_ENCODINGAESKEY='XXXXXXXXXXXXXXXXXX'#创建一个werobot对象并命名为MyRobotMyRobot=WeRoBot(token=COMPONENT_APP_TOKEN)MyRobot.config["APP_ID"]=COMPONENT_APP_IDMyRobot.config["APP_SECRET"]=COMPONENT_APP_message如果内容是文本,这里的方法会自动执行@MyRobot.textdefecho(message):#获取消息内容,如果需要获取用户的openid,也可以在这里获取content=message.content#如果文本内容大于1个字符,小于20个字符。毕竟关键字太多了,不应该叫单词if20>len(content)>=1:#大写转小写,即不区分大小写content=content.lower()#查询数据在数据库根据关键字res=share.objects.filter(key=content).values()#由于一个关键字可能对应多个内容,所以需要对搜索结果进行处理slist=[]fordatainres:temp=[data["desc"],data["link"],data["secret"]]slist.extend(temp)string="\n".join(slist)#只返回结果returnstring#这是一个订阅装饰器,就是谁订阅了就回复他这样一条消息@MyRobot.subscribedefwelcome(message):return'''谢谢关注我的公众号,我叫Batteries,我希望我能为你的进步做点什么'''#这是退订发来的消息,我能做些什么呢。.#这里可以做一些功能,比如加入黑名单,谁取消了,就不让他再订阅了,就好@MyRobot.unsubscridefgoodbye(message):return'nothing'2.修改model.py文件,创建数据库django提供了一套数据库处理框架,可以使用面向对象的方式来处理数据库,也就是ORM,所以我们只需要在类中描述数据库即可。fromdjango.dbimportmodels#在这里创建你的模型。#创建一个类#这里的类名与数据库中的表名相关#一般来说就是app名_类名就是表名classshare(models.Model):#这里创建了4列数据,包括关键词,描述,链接,链接对应的keykey=models.CharField(max_length=50)desc=models.CharField(max_length=200)link=models.CharField(max_length=100)secret=models.CharField(max_length=100)#这是这个类Data的描述信息#这里我们返回数据库中的描述信息def__str__(self):returnself.desc创建数据库django框架,默认是使用sqlite数据库,数据库名称和位置可以在mysite的设置文件中修改,我改成“werobot.db”。按理说我们这里只是创建了一个类,并不会创建真正的数据库表。实际创建数据库需要一系列操作。这里顺便创建一个管理员账号。Django自带了一个管理后天,可以让工作人员管理数据库中的数据,还是很强大的。首先需要修改设置文件#修改mysite/settings.py#在INSTALLED_APPS中加入'wrob.apps.WrobConfig',#这个'wrob.apps.WrobConfig'不能乱写,wrob是INSTALLED_APPS=['wrob.apps.WrobConfig'','django.contrib.admin','django.contrib.auth','django.contrib.contenttypes','django.contrib.sessions','django.contrib.messages','django.contrib.staticfiles',]Executesomecommands#执行这个命令让django生成一些数据库创建相关的文件#执行完成后,一个文件0001_initial.pythonmanage.pymakemigrationswrob#执行wrob0001_initial文件的app,生成一些sql语句#这里还是没有创建数据库pythonmanage.pysqlmigratewrob0001#创建数据表,执行这条命令后,对应的数据表才真正创建pythonmanage.pymigrate创建管理员用户#执行这条命令,按照提示,然后添加用户名和密码。pythonmanage.pycreatesuperuser3.修改admin.py文件这个文件修改起来比较简单,就一行。上面做完之后,在管理员界面是无法显示的对于我们添加的数据库信息,我们需要在这个文件中注册,在管理员界面注册表,然后就可以显示了。fromdjango.contribimportadmin#在这里注册你的模型。from.modelsimportshareadmin.site.register(share)4.修改urls.py文件,负责url的解析任务,也就是每个url如何对应不同的视图嘛,就靠它了,按理来说,每个app里面应该有一个urls.py文件,然后在整体的urls.py文件中包含并引用它,但是这里,因为只有一个route关系,所以,不用那么复杂,直接修改mysite/urls.pyfromdjango.contribimportadminfromdjango.urlsimportpath#importthemake_viewinwerobotfromwerobot.contrib.djangoimportmake_view#importtheappwecreatedTheMyRobotcreatedinviewfromwrob.viewsimportMyRoboturlpatterns=[path('admin/',admin.site.urls),#robot:如果url后半部分是url,用MyRobot解析。ThisurlcannotpassThebrowsertoaccess#是微信开发者后台设置中需要填写的路径('robot/',make_view(MyRobot))]4.最终效果
