经过前几篇教程的学习,相信你对于微信的操作与SAE和webpy都有了些了解,那么这次我想加一个功能,通过mysql来记录用户的反馈,如用户输入fk+内容,然后通过一个页面来显示,最终的效果如下 http://yangyanxing.sinaapp.com/ck
1.老办法,先判断用户提交过来的信息类型,先得是text类型,然后判断是否以fk 开头的message,如果是则写入mysql,然后在urls里设置一下
先启用SAE的mysql应用
你将不会得到具体的用户名与密码等信息,只会得到一个全局变量
2.创建完以后点击“管理MySQL”,进入phpmyadmin界面,很熟悉吧
创建一个叫fk字段数为4的表,你可以一个字段一个字段的定义,将id设置为primary key,AUTO_INCREMENT(A_I),也可以执行下面的sql语句
1
2
3
4
5
6
7
|
CREATE
TABLE
fk(
id
INT
AUTO_INCREMENT ,
user
TEXT,
time
TEXT,
fk_content TEXT,
PRIMARY
KEY
( id )
)
|
3.执行以后,返回到应用的代码编辑界面,由于以后会多次用到mysql操作,所以我们将数据库操作写到一个模块中,新建一个model.py,写入以下代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
# _*_ 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
下面加入以下代码
1
2
3
4
5
6
|
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文件,修改为以下内容
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
# 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
前端写的好的同学可以美化一下,我前端不好,所以只写了一个简单的表格实现
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
$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的应用,还要考虑一些防注入的问题。以后会慢慢完善