Fenriswolf 程式筆記

奮利斯狼的地盤,小綿羊勿入

Tornado routing

Tornado 是一個 non-blocking network I/O 的 python web framework,但是跟 Django, Flask 等比較有名的 web framework 比較功能還是相對陽春不少,尤其是在 routing 的部分預設是以 class 為 routing base,無法像 Flask 或 Bottle 可以用簡易的方式以 method 做設定。

Tornado 範例裡,method name 必需要跟 http method name 一致,只有 get, put, post, delete 等等名稱,無法以程式內的邏輯來命名

class HomeHandler(RequestHandler):
    def get(self):
        self.write("Hello home")

class HelloWorldHandler(RequestHandler):
    def get(self, user_name):
        self.write("Hello " + user_name)
        
    def post(self, user_name):
        self.write("Hello " + user_name)
        
def main():
    tornado.options.parse_command_line()
    app = tornado.web.Application([
        (r"/", HomeHandler),
        (r"/hello/(.*)", HelloWorldHandler),
    ])
    
    http_server = tornado.httpserver.HTTPServer(app)
    http_server.listen(options.port)
    tornado.ioloop.IOLoop.instance().start()

tornado-routing 是繼承 Tornado 原生 classes 改寫的一個簡單 routing 機制
以下是片段的範例,詳細的程式碼可以參考 demos 裡的 helloworld.py。

class HomeHandler(RequestRoutingHandler):
    @app.route('/')
    def get_home(self):
        self.write("Hello home")

class HelloWorldHandler(RequestRoutingHandler):
    @app.route('/hello/(.*)', methods = ['GET', 'POST'])
    def say_hello(self, user_name):
        self.write("Hello " + user_name)

def main():
    tornado.options.parse_command_line()
    http_server = tornado.httpserver.HTTPServer(app.get_application())
    http_server.listen(options.port)
    tornado.ioloop.IOLoop.instance().start()

 
 
執行環境
CentOS 6.2
Python 2.7.5
Tornado 3.2.1 and 3.3-dev1
 
參考資料
Tornado Web Server

廣告

2014/06/01 - Posted by | Python |

仍無迴響。

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

您的留言將使用 WordPress.com 帳號。 登出 / 變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 / 變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 / 變更 )

Google+ photo

您的留言將使用 Google+ 帳號。 登出 / 變更 )

連結到 %s

%d 位部落客按了讚: