一个基于tornado的web应用程序通常由一个或多个RequestHandler的子类和一个Application对象构成。Application用于将不同的请求路由到相应的RequestHandler.
然后 我们在main函数里启动web服务。
一个简单的"hello world"的例子如下所示:
import tornado.ioloop import tornado.web class MainHandler(tornado.web.RequestHandler): def get(self): self.write("Hello, world") def make_app(): return tornado.web.Application([ (r"/", MainHandler), ]) if __name__ == "__main__": app = make_app() app.listen(8888) tornado.ioloop.IOLoop.current().start()
Application对象:
Application对象负责进行全局的配置,包括一个用于将requests映射到handler的路由表。
这个路由表是一个由URLSpec对象(或者元组)组成的列表,其中的每一项包含了至少一个正则表达式和一个RequestHandler类。
按照匹配的先后顺序,第一个匹配的RequestHandler类将会被使用。
如果正则表达式包含捕获模式组:如下面的正则表达式包含2个捕获模式组(.*)
/([0-9]{4})/([a-z-]+)/
那么url路径中捕获到的匹配路径将会作为参数传递给RequestHandler类的HTTP方法。
如果一个字典作为URLSpec的第3个参数被传入,它将会作为初始化参数被传递给RequestHandler.
initialize
()方法
最后,URLSpec可以拥有一个名字,可以通过name=xxx的方式指定,可以通过
RequestHandler.reverse_url来方法这个名字。
举例:
class MainHandler(RequestHandler): def get(self): self.write('<a href="%s">link to story 1</a>' % self.reverse_url("story", "1")) class StoryHandler(RequestHandler): def initialize(self, db): self.db = db def get(self, story_id): self.write("this is story %s" % story_id) app = Application([ url(r"/", MainHandler), url(r"/story/([0-9]+)", StoryHandler, dict(db=db), name="story") ])在上面的例子中,根URL"/"被映射到MainHandler;然后URL模式”/story/紧跟着一个数字”被映射到StoryHandler,由于包含了一个捕获组,这个数字
被作为参数传递给了get方法,这个URLSpec还有一个字典参数,通常可以在这里传递数据库对象;
最后指定了一个名称参数。
Application的构造函数可以传递许多关键字参数来定制应用程序的功能或者开启关闭某些特性。
可以通过查看Application.settings来了解有哪些配置选项。