0.0 本讲知识概要

了解MVC的设计模式

如何开通SAE中的MySQL服务

如何写Web.py的网页模板

0.1 正文

内容并不多,我们开始吧。

0.1.0 了解MVC的设计模式

我把百科的MVC的定义粘贴过来:MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。MVC被独特的发展起来用于映射传统的输入、处理和输出功能在一个逻辑的图形化用户界面的结构中。我的理解是,MVC就是将模型,视图和控制器三者分开,其中view相当于我们web.py里的模板。Controller相当于web.py处理业务逻辑的程序,Model相当于web.py数据库数据的存储,提取等处理程序。

无论是,web.py,还是flask,亦或是django,都是采用MVC的设计模式。理解好MVC的设计模式将对以后网页开发起到至关重要的作用。

0.1.1 如何开通SAE中的MySQL服务

首先说明,现在SAE中MySQL服务的收费不低。仅仅共享型MySQL,一天24h运行费用也接近5毛。本讲所用的MySQL服务也将会于数天后撤除。

SAE内的数据库以及缓存服务比较多,有下面几种:

我们就先开通共享型MySQL:

进入phpMyadmin,输入数据库名称以及字段数,点击执行,建立一个数据库:

比如,我们想做一个用户反馈的页面,实现方式,用户输入advice建议的内容,我们就可以通过网页端展示出来。具体步骤:建立数据库

定义存储机制,存储相关数据

制作web.py的相应路由及相关模板

网页端展示

具体过程为:

建立一个字段数为4的名称为advice的数据库。

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

# _*_ coding:utf-8 _*_
import web
import web.db
import sae.const
import random
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 addadvice(username, advice_time, advice_content):
return db.insert('advice', user = username, time = advice_time, advice_content = advice_content)
def get_advice_content():
return db.select('advice', order='id')
上述代码是用python连接MySQL的具体实现。
下面我们首先需要将用户的反馈建议信息存储到MySQL数据库里,然后再在网页上显示。
首先,我们需要编辑weixinInterface.py,首先导入model模块。
import model
然后,
if content.startswith('advice'):
advice_time = time.strftime('%Y-%m-%d%H:%M',time.localtime())
model.addadvice(fromUser,advice_time,content[6:].encode('utf-8'))
return self.render.reply_text(fromUser,toUser,int(time.time()),u'感谢您的反馈')
这样,当你回复advice+建议的内容,我在MySQL数据库里面就能看到回复啦!
0.1.2 如何写Web.py的网页模板
打开index.wsgi文件,加入advice路由:
# coding: utf-8
import os
import sae
import web
import model
from weixinInterface import WeixinInterface
urls = (
'/weixin','WeixinInterface',
'/advice','advice',
)
app_root = os.path.dirname(__file__)
templates_root = os.path.join(app_root, 'templates')
render = web.template.render(templates_root)
class advice:
def GET(self):
advice_content = model.get_advice_content()
return render.advice(advice_content)
app = web.application(urls, globals()).wsgifunc()
application = sae.create_wsgi_app(app)
接下来,我们需要编写advice的模板。这是个技术活。如果要界面美观大方,可以学习下Bootstrap,这里暂时不用,就暂时用个简单的表格+css示例下。
使用了CSS3实现表格隔行/隔列变色,用css封装一下,最后的表格形式是这样的:
怎么样?看起来似乎还不错哈~
advice.html的代码如下:
$def with(advice_contents)
【蚍蜉尔】公众号用户建议 
 
body{padding:0;margin:0;font:normal 12px/24px "\5FAE\8F6F\96C5\9ED1";color:#444;}
table{width:500px;border:0;margin:100px auto 0;text-align:center;border-collapse:collapse;border-spacing:0;}
table th{background:#0090D7;font-weight:normal;line-height:30px;font-size:14px;color:#FFF;}
table tr:nth-child(odd){background:#F4F4F4;}
table td:nth-child(even){color:#C00;}
table tr:nth-child(5){background:#73B1E0;color:#FFF;}
table tr:hover{background:#73B1E0;color:#FFF;}
table td,table th{border:1px solid #EEE;}
序号
时间
建议内容
$for item in advice_contents:
$item.id$item.time$item.advice_content