`

Bottle(Flask)样的tornado开发

阅读更多
起因:

今年春节后发现有个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
2
3 @route("^/hello/([^/]+)$")
4 def hello(tor,name):
5     return u"hello %s"%name
6
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",)
4
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本身的数据访问模块

原文刊在我的博客:http://www.cnblogs.com/Alexander-Lee/archive/2010/09/08/1821049.html
分享到:
评论

相关推荐

    python常用web框架简单性能测试结果分享(包含django、flask、bottle、tornado)

    测了一下django、flask、bottle、tornado 框架本身最简单的性能。对django的性能完全无语了。 django、flask、bottle 均使用gunicorn+gevent启动,单进程,并且关闭DEBUG,请求均只返回一个字符串ok。 tornado直接...

    webargs:一个解析 HTTP 请求参数的库,内置对流行 web 框架的支持,包括 Flask, Django, Bottle, Tornado和 Pyramid-python

    webargs:一个解析 HTTP 请求参数的库,内置对流行 web 框架的支持,包括 Flask, Django, Bottle, Tornado和 Pyramid webargs 主页:https://webargs.readthedocs.io/ webargs 是一个用于解析和验证 HTTP 请求对象的...

    一个友好的库,用于解析HTTP请求参数,并内置支持流行的Web框架,包括Flask,Django,Bottle,Tornado,Pyramid,webapp2,Falcon和aiohttp。-Python开发

    webargs主页:https://webargs.readthedocs.io/ webargs是一个Python库,用于解析和验证HTTP请求对象,并内置支持流行的Web框架,包括Flask,Django,Bottle,Tornado,webargs主页:...用于解析和验证HTTP请求对象,并...

    Python技术Web开发框架对比.docx

    本文将重点讨论四个常见的Python Web开发框架:Django、Flask、Tornado以及Bottle和CherryPy,帮助开发者根据项目需求做出明智的选择。 1. Django:Django被誉为“快乐的Web开发框架”,它是一个全功能的框架,提供...

    基于Python的Web开发框架研究.zip

    Flask适合初创项目、个人博客和API接口开发。 3. Pyramid Pyramid是一个高度可配置的框架,介于Flask和Django之间。它可以处理从小型应用到大型复杂的项目。Pyramid的核心理念是灵活性,允许开发者自由选择数据库、...

    Django快速上手.md

    刚才我们说到Python有上百个Web框架,这些框架包括Django、Flask、Tornado、Sanic、Pyramid、Bottle、Web2py、web.py等。 在上述Python的Web框架中,Django无疑是最有代表性的重量级选手,开发者可以基于Django快速...

    Python全栈工程师培训 初、中、高级+项目 4大部分全套

    Tornado Flask Web.py Bottle 阶段项目实战 爬虫 缓存 阶段项目实战 消息队列 分布式任务队列 搜索 阶段项目实战 企业级开发 企业级N层架构实现 领域驱动模型 企业应用设计 团队开发 大型网站集群架构 持续集成 ...

    Python-流行的pythonWeb开发框架的基准测试

    Flask是一个轻量级的微框架,适合小型项目和快速原型开发。它不包含任何默认的库,允许开发者根据需求选择组件。Flask的核心是Werkzeug WSGI工具包和Jinja2模板引擎。在性能基准测试中,Flask可能在小规模应用中表现...

    Python技术Web框架选择指南.docx

    对于追求轻量级和灵活性的项目,则可以选择Flask或Bottle;需要高性能处理并发请求的项目,则Tornado是不错的选择;而追求高度可扩展性的项目,则Pyramid更为合适。最重要的是,开发者应当根据自己的具体需求和技术...

    Python WEB开发全栈 全套视频.txt

    ├─4.11、Bottle Web开发 │ ├─4.12、自动化测试-selenium │ ├─4.13、python自动化运维+web监控系统 │ ├─4.14、使用pyqt开发windows gui程序及打包 │ ├─4.15、Javascript 进阶 │ ...

    Python技术的Web框架与RESTful API开发指南.docx

    - **Bottle**:类似于Flask的轻量级框架,但更加强调简洁性和易用性。 #### 总结 Python技术在Web开发领域的应用极为广泛,通过选择合适的Web框架和RESTful API设计模式,开发者可以高效地构建出灵活、高效的应用...

    Python语言的网站开发框架研究.pdf

    在网络开发中,Tornado框架作为Python的一个开源Web框架,提供了一个高性能的网络服务器和Web框架,能够快速开发出网站。Tornado能够与WSGI容器一起使用,构成一个全栈替代品。此外,为了最大化利用Tornado的性能,...

    基于python语言的常用Web框架背记手册

    Python是一种广泛应用于Web开发的高级编程语言,以其简洁明了的语法和强大的库支持而闻名。本手册将深入探讨Python中的几个主流Web框架,帮助开发者更好地理解和应用这些工具,提升Web开发效率和项目质量。 一、...

    这是2019最顶级的python框架,没有之一.pdf

    CherryPy的稳定性和速度,Tornado的异步处理能力,Bottle的轻便性,Flask的灵活性,以及Cuicweb的语义Web特性,都是它们各自独特的优势。每种框架都有其适用场景,理解这些框架的特点将有助于选择最适合项目的解决...

    第1章-Pyhton-Web开发起步.pptx

    在Python Web开发领域,Django和Flask等框架扮演着至关重要的角色。本章主要介绍了Python Web开发的基础知识,包括Web应用的基本架构、Web框架的概念以及Python Web框架的概况,特别是对Django进行了深入的探讨。 ...

    python常见面试题集.docx

    最受欢迎的Python开源框架 1:Django 2:Twisted 3:Tornado 除了以上三种常用的开源框架外 还有 : Diesel、Flask、Cubes、Kartograph、Pulsar、Web2py、Falcon、DPark、Buildbot、Zerorpc、Bottle、webpy、Scrapy ...

Global site tag (gtag.js) - Google Analytics