文档章节

使用python一步一步搭建微信公众平台(五)----使用mysql服务来记录用户的反馈

Kevin_Yang
 Kevin_Yang
发布于 2014/02/14 01:25
字数 940
阅读 20530
收藏 185

经过前几篇教程的学习,相信你对于微信的操作与SAE和webpy都有了些了解,那么这次我想加一个功能,通过mysql来记录用户的反馈,如用户输入fk+内容,然后通过一个页面来显示,最终的效果如下 http://yangyanxing.sinaapp.com/ck

QQ截图20140214004740

1.老办法,先判断用户提交过来的信息类型,先得是text类型,然后判断是否以fk 开头的message,如果是则写入mysql,然后在urls里设置一下

先启用SAE的mysql应用

QQ截图20140214005244

你将不会得到具体的用户名与密码等信息,只会得到一个全局变量

QQ截图20140214005327

2.创建完以后点击“管理MySQL”,进入phpmyadmin界面,很熟悉吧

创建一个叫fk字段数为4的表,你可以一个字段一个字段的定义,将id设置为primary key,AUTO_INCREMENT(A_I),也可以执行下面的sql语句

CREATE TABLE fk(
    id INT AUTO_INCREMENT ,
    user TEXT,
    time TEXT,
    fk_content TEXT,
    PRIMARY KEY ( id )
)

3.执行以后,返回到应用的代码编辑界面,由于以后会多次用到mysql操作,所以我们将数据库操作写到一个模块中,新建一个model.py,写入以下代码

# _*_ coding:utf-8 _*_
import web
import web.db
import sae.const


db = web.database(
    dbn='mysql',
    host=sae.const.MYSQL_HOST,
    port=int(sae.const.MYSQL_PORT),
    user=sae.const.MYSQL_USER,
    passwd=sae.const.MYSQL_PASS,
    db=sae.const.MYSQL_DB
)
 
def addfk(username, fktime, fkcontent):
    return db.insert('fk', user=username, time=fktime, fk_content=fkcontent)
 
def get_fkcontent():
    return db.select('fk', order='id')

4.打开weixinInterface.py,编辑一下,记得在前面import model

if mstype == 'text':
    content=xml.find("Content").text

下面加入以下代码

if mstype == 'text':
    content=xml.find("Content").text
    if content.startswith('fk'):
        fktime = time.strftime('%Y-%m-%d %H:%M',time.localtime())        
        model.addfk(fromUser,fktime,content[3:].encode('utf-8'))        
        return self.render.reply_text(fromUser,toUser,int(time.time()),u'感谢您的反馈')

由于mysql默认的编码是utf-8,所以这里也将内容进行utf-8转码

5.在urls里添加/ck的定义

打开index.wsgi文件,修改为以下内容

# coding: UTF-8
import os
 
import sae
import web
import model
 
from weixinInterface import WeixinInterface
 
urls = (
'/', 'Hello',
'/weixin','WeixinInterface',
'/ck','feedback',
)
 
app_root = os.path.dirname(__file__)
templates_root = os.path.join(app_root, 'templates')
render = web.template.render(templates_root)
 
class Hello:
    def GET(self):
    #print "你好"
        return render.hello("你好")
    
class feedback:
    def GET(self):
        fkcon = model.get_fkcontent()
        return render.checkfk(fkcon)
    
app = web.application(urls, globals()).wsgifunc()
        
application = sae.create_wsgi_app(app)

6.接下来我们来写checkfk的渲染文件

在templates下面新建一个checkfk.html

前端写的好的同学可以美化一下,我前端不好,所以只写了一个简单的表格实现

$def with(fkcontent)

        <table border="1" align = center>
            <tr>
                <th>序号</th>
                <th>时间</th>
                <th>反馈内容</th>            
            </tr>
            $for item in fkcontent:
            <tr>
                <td id="tdstyle">$item.id</td>
                <td id="tdstyle">$item.time</td>
                <td id="tdstyle">$item.fk_content</td>
                
            </tr>
        </table>

这里牵扯到webpy的模板实现,里面可以写python代码,但是要以$开头,具体的可以google得到更多的学习

好了,都写好后保存一下吧,在手机上用微信给你的公众账号反馈点内容,以fk(空格)内容发送,然后打开应用

http://yangyanxing.sinaapp.com/ck

7.遗留问题,这里的内容没有进行过滤,可以写点过滤,如空内容无法提交并返回一个友好的提示,牵扯到mysql的应用,还要考虑一些防注入的问题。以后会慢慢完善

&#160;

回顾之前的文章

使用python一步一步搭建微信公众平台(一)----基本的验证与鹦鹉学舌功能

使用python一步一步搭建微信公众平台(二)----搭建一个中英互译的翻译工具

使用python一步一步搭建微信公众平台(三)----添加用户关注后的欢迎信息与听音乐功能

使用python一步一步搭建微信公众平台(四)----将小黄鸡引入微信自动回复

© 著作权归作者所有

共有 人打赏支持
Kevin_Yang
粉丝 248
博文 34
码字总数 34570
作品 0
通州
加载中

评论(20)

Kevin_Yang
Kevin_Yang

引用来自“hgold”的评论

自己写的一个 .pyd 文件,如何传到新浪SAE上?
svn
hgold
hgold
自己写的一个 .pyd 文件,如何传到新浪SAE上?
h
hehongyu
我已经自己解决了0。谢谢博主的教程~~写的很好
h
hehongyu
我的意思是guid加不进去。
试了web.db的update和query,都不行
h
hehongyu
博主,有一个问题不明白,请教一下:
我的表里有一个字段是微信的id(微信post来的那个),名字叫做weixin_id,我更新数据的函数如下:
def update(weixinID, t_guid):
db.update('user_info', vars={'weixinID': weixinID}, where='weixin_id=$weixinID', guid=t_guid)
这样子guid这个值还是始终不变。我觉得是没有找到符合weixin_id=weixinID这个条件的字段,所以数据被更新进去。那么,是不是要进行编码转换呢?
我试过weixinID.encode('utf-8'),仍然没效果。
weixin_id字段是utf-8_bin的
请问该如何解决
Kevin_Yang
Kevin_Yang

引用来自“caishaobai”的评论

class feedback:
  def GET(self):
    fkcon = model.get_fkcontent()
    try:  
      return render.checkfk(fkcon)
    except Exception,e:
      print e
如上,在做记录用户反馈这块功能时会出错,然后查看日志定位到了代码报错的地方,自己加了try-except来捕捉错误,再次查看日志提示报错原因为:'utf8' codec can't decode byte 0xd0 in position 28: invalid continuation byte yq26 。请问博主这个出错要怎么修改?
你在向mysql插入数据的时候先将数据进行utf-8转码model.addfk(fromUser,fktime,content[3:].encode('utf-8')) 另外你在model里取数据的时候,在index.wsgi文件头先定义一下# coding: UTF-8,模板的xml文件也要是utf-8编码
c
caishaobai
class feedback:
  def GET(self):
    fkcon = model.get_fkcontent()
    try:  
      return render.checkfk(fkcon)
    except Exception,e:
      print e
如上,在做记录用户反馈这块功能时会出错,然后查看日志定位到了代码报错的地方,自己加了try-except来捕捉错误,再次查看日志提示报错原因为:'utf8' codec can't decode byte 0xd0 in position 28: invalid continuation byte yq26 。请问博主这个出错要怎么修改?
Kevin_Yang
Kevin_Yang

引用来自“fptxyy”的评论

(四)里面的代码照抄的,但是翻译功能出不来.
第一步里有两处写错了,如果完全按照我写的代码会有问题 勘误 文中有一处weixinIterface,应为weixinInterface; 一处templatest,应为templates。 改下再试试
fptxyy
fptxyy
(四)里面的代码照抄的,但是翻译功能出不来.
fptxyy
fptxyy
在http://sae.sina.com.cn,MySQL初始化成功了,但,管理MySQL,使用PHPMyAdmin管理数据库,点开就出错了,说没有表,
另外,我把音乐上传到自己的网站,代码写:[r'http://www.fptxyy.com/music/09.mp3',u'音乐',u'音乐'] 在手机微信里打开,并不能播放。在电脑里是正常播放的。
不知怎么解决,望老师指点!谢谢!
使用python一步一步搭建微信公众平台(二)----搭建一个中英互译的翻译工具

距离上次写使用python一步一步搭建微信公众平台(一)已经有几个月了,当中自已也搭建了一个中英文互译的小应用,可是由于英文翻中文好弄,中文翻译成英文一直有问题,知道是编码的问题,但是...

Kevin_Yang
2014/01/19
0
39
使用python一步一步搭建微信公众平台(三)----添加用户关注后的欢迎信息与听音乐功能

在使用python一步一步搭建微信公众平台(二)中最后我们留下了一个问题,就是单引号的content在render到xml中时,返回给用户的信息会被转码,如‘<>&’会被转为<>&用户在收到有<>&等内容的时...

Kevin_Yang
2014/01/31
0
29
使用python一步一步搭建微信公众平台(四)----将小黄鸡引入微信自动回复

通过前三篇的教程,相信大家基本上了解了微信开发的基本流程,先判断用户传入数据的类型MsgType,然后再获取用户输入的内容content,再对content进行处理,再返回给用户 现在我们来加点料,在...

Kevin_Yang
2014/02/09
0
21
Linux下配置Django_Apache_Mysql环境(CentOS 7.5)

本文将介绍如何在Linux上部署Django + Mysql + Apache环境。我们知道,Django内置的http服务器只能工作在单线程下,做开发和调试时候是可以的,但是生产环境通常都会有多用户并发,而且djang...

爱吃甜食的boy
08/16
0
0
jumpserver 3.0 开源跳板机环境搭建

摘要: Jumpserver 是一款由python编写开源的跳板机(堡垒机)系统,实现了跳板机应有的功能。基于ssh协议来管理,客户端无需安装agent。 特点: 完全开源,GPL授权 Python编写,容易再次开发 ...

YU文武貝
07/14
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Ubuntu18.04 显卡GF-940MX安装NVIDIA-390.77

解决办法: 下面就给大家一个正确的姿势在Ubuntu上安装Nvidia驱动: (a)首先去N卡官网下载自己显卡对应的驱动:www.geforce.cn/drivers (b)下载后好放在英文路径的目录下,怎么简单怎么来...

AI_SKI
今天
1
0
深夜胡思乱想

魔兽世界 最近魔兽世界出了新版本, 周末两天升到了满级,比之前的版本体验好很多,做任务不用抢怪了,不用组队打怪也是共享拾取的。技能简化了很多,哪个亮按哪个。 运维 服务器 产品 之间的...

Firxiao
今天
1
0
MySQL 8 在 Windows 下安装及使用

MySQL 8 带来了全新的体验,比如支持 NoSQL、JSON 等,拥有比 MySQL 5.7 两倍以上的性能提升。本文讲解如何在 Windows 下安装 MySQL 8,以及基本的 MySQL 用法。 下载 下载地址 https://dev....

waylau
今天
0
0
微信第三方平台 access_token is invalid or not latest

微信第三方开发平台code换session_key说的特别容易,但是我一使用就带来无穷无尽的烦恼,搞了一整天也无济于事. 现在记录一下解决问题的过程,方便后来人参考. 我遇到的这个问题搜索了整个网络也...

自由的开源
今天
3
0
openJDK之sun.misc.Unsafe类CAS底层实现

注:这篇文章参考了https://www.cnblogs.com/snowater/p/8303698.html 1.sun.misc.Unsafe中CAS方法 在sun.misc.Unsafe中CAS方法如下: compareAndSwapObject(java.lang.Object arg0, long a......

汉斯-冯-拉特
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部