今天的30天挑战,我决定先暂停JavaScript,学习一款叫Tornado的web框架。学Tornado是为了能用Python开发web程序,我只会Flask框架,所以学Tornado能好好补充一下我的Python web开发技能。本文我们要开发的程序会用到Tornado作为REST后端,MongoDB数据库,AngularJS为客户端JavaScript MV*框架,OpenShift作为部署平台。

 [译] 第二十五天:Tornado - 结合Tornado, MongoDB和AngularJS开发应用

什么是Tornado?

Tornado是一个开源的Python Web框架,也是非阻塞式web服务,最初在FriendFeed开发。FriendFeed被收购后,由Facebook维护和开发。由于它的非阻塞式的网络I/O特色,有高超的可扩展性,能同时检测上千的并发连接。 

程序用例

本文我们开发个网摘程序允许用户发布和分享链接,你可以查看OpenShift在线程序,和第22天的一样,可以参考之前的用例来了解。 

Github仓库

今天的demo放在 github: day25-tornado-demo-app

前提准备

在开始用Tornado之前,我们需要安装Pythonvirtualenv, 本文我用的Python版本是2.7. 

这个程序需要用MongoDB作数据存储,请下载最新MongoDB

开发Tornado MongoDB程序

我们用pip安装开始,对于不了解pip的读者,pip是一个Python包管理。我们可以从官网下载pip,在你系统上任意合适路径运行以下命令。

$ mkdir getbookmarks
$ cd getbookmarks
$ virtualenv venv --python=python2.7
$ . venv/bin/activate
$ pip install tornado
$ pip install pymongo
View Code

以上代码会在本机创建一个getbookmarks目录,然后用2.7的Python激活virtualenv,再安装tornado包,最后安装pymongo. Pymongo是官方MongoDB Python驱动,用来写Stories到MongoDB.

在getbookmarks文件夹下新建getbookmarks.py文件。

$ touch getbookmarks.py
View Code

复制以下代码粘贴到getbookmarks.py源文件。

import os
from tornado import ioloop,web
from pymongo import MongoClient
import json
from bson import json_util
from bson.objectid import ObjectId
 
class IndexHandler(web.RequestHandler):
    def get(self):
        self.write("Hello World!!")
 
settings = {
    "template_path": os.path.join(os.path.dirname(__file__), "templates"),
    "static_path": os.path.join(os.path.dirname(__file__), "static"),
    "debug" : True
}
 
application = web.Application([
    (r'/', IndexHandler),
    (r'/index', IndexHandler),
],**settings)
 
if __name__ == "__main__":
    application.listen(8888)
    ioloop.IOLoop.instance().start()
View Code

以上代码:

  1. 从导入必要库开始。
  2. 接着,定义了一个叫IndexHandler的类,用于扩展 web.RequestHandler. Tornado web程序映射URLs或者URL模式到 web.RequestHandler的子类。这些类定义get(), post()等方法来处理HTTP GET或者POST请求,当GET请求发出到'/' url,      IndexHanlder就响应"Hello World!".
  3. 定义了一些程序设置,template_path是告诉Tornado程序在templates路径找程序模板,static_path通知程序给静态资源如css, images,和javascript文件用静态路径。同时也通过debug:True激活调试模式,调试模式主要好处是能自动加载更新,我们可以让调试在后台运行,程序照常工作,这大大提高了生产环境效率。
  4. 然后,创建了Tornado程序实例,传给路由和设置。
  5. 最后用python      getbookmarks.py命令启动服务运行程序。 

用以下命令运行程序,查看  http://localhost:8888http://localhost:8888/index, 确保能看到"Hello World!".

$ python getbookmarks.py
View Code

相关文章: