Tornado之请求与响应头

Tornado之请求与响应头
import tornado.ioloop
import tornado.httpserver
import tornado.web
import tornado.options
import json
import time

from tornado.options import options,define
define("port",default=8080,help="run port",type=int)

class MainHandler(tornado.web.RequestHandler):
    def get(self):
        self.write("我在下面!<br>")
        name = self.get_argument("name","none")
        self.write("这个是我:"+name)

class HeaderHandler(tornado.web.RequestHandler):
    def get(self):
        self.write('set_header')
        self.set_header('aaa', '1111')         ###set_header 可以设置响应头,如果出现同一个响应头,会覆盖
        self.set_header('bbb', '2222')
        self.set_header('bbb', '3333')

class AddHandler(tornado.web.RequestHandler):     ##add_header 可以向响应头里面添加信息,而且是可以出现相同信息
    def get(self):
        self.write('add_header')
        self.add_header('ccc', '3333')
        self.add_header('ccc', '4444')

class CleanHandler(tornado.web.RequestHandler):      #  clear_header 可以撤销给定的响应头信息
    def get(self):
        self.write('clear_heander')
        self.add_header('abcd', '5555')
        self.add_header('abcd', '6666')
        self.clear_header('abcd')   #清除所有的abcd的响应头

class SendHandler(tornado.web.RequestHandler):
    def get(self):
        self.write('send_error')
        # self.flush()
        # self.send_error(404)          ### send_error 可以将指定的 HTTP 错误码发送到浏览器
        '''
        使用 send_error 时需要注意:如果已经执行了 flush,则不能再执行 send_error,因此该方法将简单地终止响应
        如果输出已写入但尚未刷新,则将其丢弃并替换为错误页面
        '''
        def write_error(self, status_code, **kwargs):     # send_error  在其底层调用的是 write_error
            self.write('status_code: %s' % status_code)    #此处可以对write_error方法进行重写

class NotFoundHandler(tornado.web.RequestHandler):
    def get(self, *args, **kwargs):
        self.send_error(404)
    def write_error(self, status_code, **kwargs):
        self.render('error_notfound.html')    #返回一个error_notfound.html页面

class IndexHandler(tornado.web.RequestHandler):    #注意先后执行顺序
    def set_default_headers(self):
        print(' ---set_default_headers---:设置header')
    def initialize(self):
        print(' ---initialize---:初始化')
    def prepare(self):
        print(' ---prepare---:准备工作')
    def get(self):
        self.write(' ---get---:处理get请求'+'<br>')
    def post(self):
        self.write(' ---post---:处理post请求'+'<br>')
    def write_error(self, status_code, **kwargs):
        print(' ---write_error---:处理错误')
    def on_finish(self):
        print(' ---on_finish---:结束,释放资源')


application = tornado.web.Application(
      handlers = [
          (r"/", MainHandler),
          (r"/set", HeaderHandler),
          (r"/add",AddHandler),
          (r"/set",AddHandler),
          (r"/clean",CleanHandler),
          (r"/send",SendHandler),
          (r"/index",IndexHandler),
          (r'/(.*)', NotFoundHandler),    #放到最后

      ],
      template_path = 'templates',
      debug=True
  )

if __name__ =="__main__":
    tornado.options.parse_command_line()
    http_server=tornado.httpserver.HTTPServer(application)
    http_server.listen(options.port)
    tornado.ioloop.IOLoop.instance().start()