A fool with a tool is still a fool but more powerful!

—— unknow

相识tornado--web framework(二)

2015-26-05

Ok, 我们继续来说 tornado web framework. 先来一段代码


# !/usr/bin/env python
# -*- coding:utf-8 -*-

"""
a simple tornado web application demo
"""

from tornado.ioloop import IOLoop
from tornado.web import RequestHandler, Application, url


class AppHandler(RequestHandler):

    def initialize(self, app):
        self.init_app = "%s initialize" % app

    def prepare(self):
        self.prepare_app = "<br/>" + self.init_app + " + prepare </br>"

    def get(self, page=1):
        page = "current page is %s <br/>" % page
        app = self.get_argument('app', None)
        arg_app = "arg_app is %s" % app
        form = """
            <form method="post">
               <input type="text" name="app">
                <input type="submit">
            </form>
        """
        self.write(page + self.init_app + self.prepare_app + form + arg_app)

    def post(self):
        app = self.get_argument('app', None)
        self.redirect("/2?app=%s" % app)


def make_app():
    settings = dict(
        debug=True,
        gzip=True
    )
    return Application([
        url(r"/", AppHandler, dict(app="app_test")),
        url(r"/(\w+)", AppHandler, dict(app="app_test")),
    ], **settings)

if __name__ == '__main__':
    app = make_app()
    app.listen(8888)
    IOLoop.current().start()

其中get(), post() 很好理解对应http协议中的get, post。当然要是需要put 或者 delete 就写成相应的 def put(self):pass 或者 f delete(self):pass

get() 方法中的二个参数'page'对应url的正则(\w+),如比当url需要有两个参数传入就可以 写为get(self, page, page_size),router 中写为 url(r"app/(page)/(page_size)") 注意用正则

关于表单,或者url上argment获得使用get_argument方法,

initialize()顾名思义,初始化Heandler的时候执行。而prepare()为每次http请求钱执行 基本上最常用了的是prepare.

RequestHandler的属性和方法还有 RequestHandler.request 为请求的所有参数(如 headers 和 body). set_status(e) 设置response的status code set_header() 设置头部。上面用到的 redirect() 重定向。还有像cookie相关的都在 RequestHandler下面。

上面只做一些大体介绍和简单使用说明。更多方法及用法查看官方文档。设置是tornado源代码。 后面会继续介绍template和本地化。