文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>Bottle(Flask)样的tornado开发

Bottle(Flask)样的tornado开发

时间:2010-09-08  来源:亚历山大同志

起因:

今年春节后发现有个tornado web的东西,app server+web framework的集合体,正好工作 中有个项目需要其中的异步远程调用的特性,遂研究之,用到现在感触良多,其性能尚可, 但是作为Web Framework看来其封装方式我并不喜欢,窃以为不够紧凑,需要设置的地方不 够清晰,很多功能的使用稍显繁琐。并且在新创建一个app的时候如果不参看已有的app做为 参考,重头写起来很困难。 举个例子 : 代码  1 
 2 import tornado.httpserver
 3 import tornado.ioloop
 4 import tornado.options
 5 import tornado.web
 6 
 7 from tornado.options import define, options
 8 
 9 define("port", default=8888, help="run on the given port", type=int)
10 
11 class MainHandler(tornado.web.RequestHandler):
12     def get(self):
13         self.write("Hello, world")
14 
15 def main():
16     tornado.options.parse_command_line()
17     application = tornado.web.Application([
18         (r"/", MainHandler),
19     ])
20     http_server = tornado.httpserver.HTTPServer(application)
21     http_server.listen(options.port)
22     tornado.ioloop.IOLoop.instance().start()
23 
24 if __name__ == "__main__":
25     main()
26 

 

 

从官网的例子就能看出,首先启动一个服务就很麻烦了,加之Python在开发的时候智能感知 能起的作用不是很大,所以开发起来相当的纠结。而且其中我最需要的远程页面异步访问的 功能,就需要涉及到N个地方。 最近新出的Flask,Bottle等框架简洁的API让我很是眼热,但是如果在tornado后端用wsgi 来使用Bottle又没有办法使用异步远程访问,相当于阉割了一个我最需要的功能,所以怒由 心中起恶向胆边生,自起炉灶在tornado的Web Framework基础上实现了这个东西,由于是简 化了tornado的开发方式,所以就称之为 easytor 吧

从DEMO开始:

同样是实现一个HelloWorld的APP,我们用easytor来做做看: easytor只有一个文件,你可以直接放在项目的目录中,或者安装后使用
1 from easytor.app import apprun,route

3 @route("^/hello/([^/]+)$")
4 def hello(tor,name):
5     return u"hello %s"%name

7 if __name__=="__main__":
8     apprun()

 


我们import easytor.app模块中的 apprun和route,apprun是启动服务器的方法,而route 是一个Decorator,用来把一个handler函数和映射到的url一起注册到easytor的处理器列表 中。

url映射:

easytor中定义了很多Decorator,用于注册一些特定方法并挂载到相应的事件中。最重要的 就是route。 用route注册的函数至少有一个参数,第一个参数是tornado的handler对象,访问参数, headers,cookie,是从这个参数开始,详细的内容参见tornado的文档。 url映射通过route这个Decorator来注册,同时route还可以通过参数指定访问这个url是否 需要认证,是否是Ajax请求和接受请求的方法。 route可以将正则表达式中的组取出来成为Handler函数的参数,如同Demo里那样,如果访问 /hello/alex,就显示 hello alex

输出Response:

easytor通过Handler函数的返回值向浏览器输出内容,返回值可以是str,unicode,或者几 个包装类,json,view,static_file,redirect,remote,async。实例化后将实例直接return  即可。 比如要输出json,只需要
1 return json(dict(name="alex"))

 


view用于包装render输出数据到模板。 redirect用于专跳页面。 remote是对远程异步获取页面的封装 async是一个空包装,用于挂起当前的请求(详见tornado的Demo:chat)

异步访问:

异步访问通过remote类来实现,看下面的例子: 1 @route("^/remoteacc$")
2 def get_page(tor):
3     return remote("http://target..",method="GET",)

5 def on_get_page(tor,response):
6     return response.body

 


对比tornado原本的例子,可以看到整个API简单了不少

目的:

少写代码,少写代码,还是少写代码
项目地址:http://bitbucket.org/alexander_lee/easytor 如果你也在用,或者打算用tornado来构建自己的Web应用,不妨试试easytor 同时也期待你的加入
PS:项目文档整理中,DEMO正在写,代码8号中午push上来

下一步目标:植入Session支持的扩展接口,加入fsdal代替tornado本身的数据访问模块 





相关阅读 更多 +
排行榜 更多 +
找茬脑洞的世界安卓版

找茬脑洞的世界安卓版

休闲益智 下载
滑板英雄跑酷2手游

滑板英雄跑酷2手游

休闲益智 下载
披萨对对看下载

披萨对对看下载

休闲益智 下载