您当前的位置: 首页 > 

09 Tornado - 接口与调用顺序

杨林伟 发布时间:2019-09-02 17:22:15 ,浏览量:1

下面的接口方法是由tornado框架进行调用的,我们可以选择性的重写这些方法。

1. initialize()

对应每个请求的处理类Handler在构造一个实例后首先执行initialize()方法。在讲输入时提到,路由映射中的第三个字典型参数会作为该方法的命名参数传递,如:

class ProfileHandler(RequestHandler):
    def initialize(self, database):
        self.database = database

    def get(self):
        ...

app = Application([
    (r'/user/(.*)', ProfileHandler, dict(database=database)),
    ])

此方法通常用来初始化参数(对象属性),很少使用。

2. prepare()

预处理,即在执行对应请求方式的HTTP方法(如get、post等)前先执行,注意:不论以何种HTTP方式请求,都会执行prepare()方法。

以预处理请求体中的json数据为例:

import json

class IndexHandler(RequestHandler):
    def prepare(self):
        if self.request.headers.get("Content-Type").startswith("application/json"):
            self.json_dict = json.loads(self.request.body)
        else:
            self.json_dict = None

    def post(self):
        if self.json_dict:
            for key, value in self.json_dict.items():
                self.write("%s

%s

" % (key, value)) def put(self): if self.json_dict: for key, value in self.json_dict.items(): self.write("%s

%s

" % (key, value))

用post方式发送json数据时: 在这里插入图片描述 用put方式发送json数据时: 在这里插入图片描述

3. HTTP方法

在这里插入图片描述

4. on_finish()

在请求处理结束后调用,即在调用HTTP方法后调用。通常该方法用来进行资源清理释放或处理日志等。注意:请尽量不要在此方法中进行响应输出。

5. set_default_headers() 6. write_error() 7. 调用顺序

我们通过一段程序来看上面这些接口的调用顺序。

class IndexHandler(RequestHandler):

    def initialize(self):
        print "调用了initialize()"

    def prepare(self):
        print "调用了prepare()"

    def set_default_headers(self):
        print "调用了set_default_headers()"

    def write_error(self, status_code, **kwargs):
        print "调用了write_error()"

    def get(self):
        print "调用了get()"

    def post(self):
        print "调用了post()"
        self.send_error(200)  # 注意此出抛出了错误

    def on_finish(self):
        print "调用了on_finish()"

在这里插入图片描述 在正常情况未抛出错误时,调用顺序为:

  1. set_defautl_headers()
  2. initialize()
  3. prepare()
  4. HTTP方法
  5. on_finish()

在有错误抛出时,调用顺序为:

  1. set_default_headers()
  2. initialize()
  3. prepare()
  4. HTTP方法
  5. set_default_headers()
  6. write_error()
  7. on_finish()
关注
打赏
1688896170
查看更多评论

杨林伟

暂无认证

  • 1浏览

    0关注

    3183博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文
立即登录/注册

微信扫码登录

0.1306s