临时接个任务,写几个操作数据库视图的接口,很简单,大概就是定义一些api,响应终端的请求,返回相应的数据。
借这个机会写一个比较详细的范例教程。
1.环境
Windows 7 Ultimate 32-bit
Aptana studio 2.0;
pydev 2.2.0;
(我选用Aptana是因为平时用他来写javascript等东西,顺手就拿来写python了,我深切认为用一般的Eclipse + PyDev效果是一样一样的。而且还没有烦人的中文问题。至于中文问题呢,就python本身而言,也是有的,如果你的code中有中文字符,编译器是会报错的,大抵报的是字符问题,解决办法是在code开始的地方,写上这样的注释:
#!/usr/bin/env python
# -*- coding:utf-8 -*-
其中关事的当然是下面那句。上面那句的作用是在linux上,此文件(.py)是可执行的。)
工程引用类库:mysql-python,tornado。(如何安装?)
2. 步骤
让我们编写我们的主模块吧!
这是一个让人欢愉的界面,让我们开始吧。
其中,我将handler放到了另一个包中:
这样,我们的第一个效果如下:
(to be continued...)
引用来自“wangchengcai”的评论
什么浏览器。。。
WARNING:root:404 GET /css/exclamation-red.png (127.0.0.1) 0.00ms
WARNING:root:404 GET /css/extra.css (127.0.0.1) 1.00ms
访问静态资源里后台老是打印warning ,怎么样关掉这个?
引用来自“yak”的评论
一个action一个连接,相当于数据库连接池,应该比全局一个db实例高效得多
另外不知道在这里面怎么 调试, 写print 并不在控制台打印消息
我还没试过print不行的。
另外不知道在这里面怎么 调试, 写print 并不在控制台打印消息
引用来自“yak”的评论
去掉 @property就可以了, 这样应该是所有action共享一个db连接吧
基类会在每一次子类被实例化时实例化一次,因此链接是不一样的。
如果你要共享,请将db放在全局或者放在Application里。
引用来自“yak”的评论
class BaseHandler(tornado.web.RequestHandler):
@property
def initialize(self):
self.db= database.Connection("localhost","test", "root",'root')
class TestHandler(BaseHandler):
def get(self):
为什么我这样写就不行呢
self.initialize(**kwargs)
TypeError: 'NoneType' object is not callable
请抽空阅读tornado文档。
@property
def initialize(self):
self.db= database.Connection("localhost","test", "root",'root')
class TestHandler(BaseHandler):
def get(self):
为什么我这样写就不行呢
self.initialize(**kwargs)
TypeError: 'NoneType' object is not callable
引用来自“yak”的评论
autoescape=True 是这个原因