tornado开发输入输出,数据库操作,内置模板,综合示例
2013-04-01 18:33
351 查看
tornado开发学习之2.输入输出,数据库操作,内置模板,综合示例
使用python环境中的tornado进行web开发上篇已经解决了urlmap和基本运行机制的问题。接下来进行web编程就是一下几个问题1.输入数据的获取和输出运算结果
2.数据库操作
3.自带模板的使用
当然还有cookies和session等,这些杂项,不在本篇进行学习。
1.输入数据的获取和输入运算结果
WEB作为一种UI表达方式,最重要的是获取数据和表达运算结果,所以如何在一个web开发框架中获取url或post传递过来的参数十分重要,我建议学习所有的Web开发语言或框架都从此开始比较好。在tornado中从我自己的理解来看有两种获取参数的方式a.通过urlmap做正则表达式,通过抓取组来直接获取参数
这就需要我们在做URL配置时就想好要传递的参数如,我们需要给ArticleDetail类传递一个文章编号,我们知道这个编号只能是数字类型的。那么可以在配置时写成如下样子
b.通过在get或post中使用tornado的RequestHandler的get_argument函数来获取参数
为了同样获取到文章id这个参数,如果我们不在URL配置时做正则(一般我都不做,因为我对正则不很熟练),也可以在具体处理某个地址的类方法中使用get_argument来获得参数值,还是以获取文章编号为例,我们需要如下方式来编写Url配置
2.数据操作
WEB开发与其他开发一致,也需要涉及数据的持久化和数据的读取。WEB的UI是HTML解决软件的界面,参数的收集,事件的触发,结果的显示;开发语言负责解决运算逻辑,数据读取和保存;数据库和数据文件或其他方式的持久化解决对象持久化和数据源问题(当然还有一种叫oracle的数据库!!!!它太NB了,自己都能写WEB,也能写程序,与我理解上数据库应该干的活区别较大,请观众随意吐槽);所以解决参数获取和数据库操作,基本上就解决了WEB开发的最大问题了(jquery?html?这也是很大的问题,但属于前端开发的主要学习方向)。tornado内置了一个简单封装了Mysql的操作,pypminstallpython-mysql需要事先安装好驱动哦。公布出来的函数比较少,与直接使用python的数据接口基本一致,稍稍简单写。
a.数据连接
b.查询常用的查询方法如下
1).query(),用于执行select语句,返回的是行集list,例如
2).get(),返回的是符合条件的结果集的第一行
3).execute(),用于执行select以外的语句,返回值基本无视
c.数据结果
知道如何查询后续就是如何利用查询得到的结果了。
对于query()操作返回的是[]数组(命名位items),
数组中每一个元素均是{}字典(每一个都是item)。
如果确切知道字段名(属性名)如确切知道查询结果中至少有一行数据,包含名为title的字段,可以直接使用items[0].title得到数据。
如果不确切知道字段名,或字段值可能为None,可使用items[0].get('title','')来获取值。最常用的方法是循环
foriteminitems:printitem.get('title','')
d.其他操作
execute_rowcount(sql)用于获取查询或更新得到的记录行集的行数,特别有意思的是如果你要更新的内容本来已经是那个样子,如
printdb.execute_rowcount("updatecustomersetsex='女'whereid=10128")printdb.execute_rowcount("updatecustomersetsex='女'whereid=10128")
执行两遍得到的结果是1,0。我原来一直以为数据库很弱智的,看来是我那时候不懂事,很天真。
close()用于手动关闭数据连接,在小型应用中我们基本不会看到他的出现
3.自带的模板的使用
web编程其实可以不用模板的,但是那样不仅写的时候痛苦,写出来以后更痛苦写的时候,html代码与python代码混合,连接字符串非常费力
改的时候很容易出现错误,python又不是编译执行的,上线了执行到某错误时,多恼火,低级愚蠢的错误容易犯
换web的UI时这种写法根本没办法操作,那就是重写一次程序啊,杀人的心都有的
所以如果你开发了一个Web系统,但是没有用模板技术,这个系统就只能给钱多人傻的单位做了。
mako是我最喜欢的模板,但是学习tornado么,而且不是那种排版敏感的,先来学习用用它自带的。
web使用开发使用模板引擎我么要主要解决一下几个主要的问题,在tornado中我们一个个破解
-1.路径和模板存放方式
善用os.path.dirname(file)来解决路径问题,例如我们的模板准备放在工程的根目录下的/T/目录中,对于模板存放的目录我们可以这样定义
2.数据与模板如何结合
模板主要功能之一就是解决数据的显示方式,如何把我们的数据交给模板使用?首先我们来获取数据
1.tornado的模板不需要严格按照python的缩进来书写
2.tornado的模板使用{{变量或对象}}来获取具体的变量值或对象属性值
3.tornado的模板中使用{%forvarinvars%}....{%end%}来实现循环
4.tornado的模板中使用{%if条件%}...{%elif条件%}...{%else%}...{%end%}方式实现模板内的判断
5.tornado的模板使用{%include文件名%}来包含子模板,同时也会运算子模板的运算逻辑