Tornadao—接口与调用顺序

目录

  1. initialize()
  2. prepare()
  3. HTTP方法
  4. 调用顺序

 

  • initialize()


    对应每个请求的处理类Handler在构造⼀个实例后⾸先执⾏initialize()⽅法。将路由
    映射中的第三个字典型参数会作为该⽅法的命名参数传递,如:
    
    class ProfileHandler(RequestHandler):
     def initialize(self, database):
     self.database = database
     def get(self):
     ...
    app = Application([
     (r'/user/(.*)', ProfileHandler, dict(database=database)),
     ])
    
    此⽅法通常⽤来初始化参数(对象属性),

     

  • prepare()


    import json
    class IndexHandler(RequestHandler):
     def prepare(self):
     if self.request.headers.get("ContentType").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("<h3>%s</h3><p>%s</p>" % (key, value))
     def put(self):
     if self.json_dict:
     for key, value in self.json_dict.items():
     self.write("<h3>%s</h3><p>%s</p>" % (key, value))

     

  • HTTP方


  • 调用顺序


    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()

     

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值