Tornado 是一个 HTTP 框架,用 Python 编写,非常简洁而且高效。
使用 Tornado 的契机是,想要在新浪云上搭建自己的网站,免费版的只有使用 Python 的 wsgi 框架。试了许多种框架,比如 Flask,web.py,和 Tornado,对 Tornado 比较有感。
参考书籍:<Introduction to Tornado> by. Michael Dory, Adam Parrisb & Brendan Berg O'REILLY
书本身不长,只有百来页,往后会记录一些学习过程中的笔记。
1. Mac 上安装 Tornado 比较简单,在 Terminal 里输入
pip install tornado
即可。
2. 第一个项目自然是 Hello World。
import tornado.httpserver
import tornado.ioloop
import tornado.options
import tornado.web
from tornado.options import define, options
define("port", default=8000, help="run on the given port", type=int)
class IndexHandler(tornado.web.RequestHandler):
def get(self):
greeting = self.get_argument('greeting', 'Hello')
self.write(greeting + ', friendly user!')
if __name__ == "__main__":
tornado.options.parse_command_line()
app = tornado.web.Application(handlers=[(r"/", IndexHandler)])
http_server = tornado.httpserver.HTTPServer(app)
http_server.listen(options.port)
tornado.ioloop.IOLoop.instance().start()
示例代码还是比较短的,程序整体在我理解下是这样的:
<1> 启动 Tornado 客户端
<2> parse 命令行参数,这里是为了指定端口,默认8000,见 "define" 那行
<3> 对请求的链接绑定一个方法,即访问根目录时(“/”),调用 IndexHandler 方法。
<4> IndexHandler 方法本身会先 parse 请求链接,得到 greeting 这个参数的值,然后用 “write” 写一行文字,返回给请求端。
运行程序,在 Terminal 中,cd 到这个程序的目录下,输入
python hello.py --port=8000
就能开启Tornado 程序了。
访问刚才创建的网页,可以在浏览器里输入 http://localhost:8000,也可以在 Terminal 里输入
curl http://localhost:8000
返回的就是
Hello, friend user!
从这个 Hello 可以看出来,IndexHandler 里的那个 get_argument 第二个参数是缺省值。如果指定 greeting 的值,如
curl http://localhost:8000/?greeting=Welcome
返回的就是
Welcome, friend user!
喜闻乐见
也就是说,通过 get_argument 可以解析带参数的 GET 请求了,然后用 Python 的一些函数做一些处理,最后再返回给请求端。