Tornado输出和响应头

1.输出html

再来看看输出`write`,实际上,`write`并无直接把数据返回给前端,而是先写到缓存区,函数结束以后才会返回到前端,咱们验证以下前端

class FlushHandler(tornado.web.RequestHandler):
    def get(self):
        self.write('this is '+'<br>')
        self.write('tornado'+'<br>')
        self.flush()
        import time
        time.sleep(5)
        self.write('hahaha')
        self.flush()
        self.write('en~~~~')

这里咱们能够很明显看到,在有无`self.flush()`的时候,结果是不同的。若是有的话,就能够先看到前面的输出,没有的话,要等到函数执行完才可以一块儿打印出来 。`self.flush()`就是将当前输出缓冲区刷新到网络。web

除了上面的`self.flush()`以外,还有`self.finish()`须要咱们注意,它就相似于函数里面的`return`,一旦执行,后面就不能再执行`self.write`,函数原型:浏览器

[`RequestHandler.finish(chunk = None)`](http://www.tornadoweb.org/en/stable/_modules/tornado/web.html#RequestHandler.finish)缓存

在finish函数调用完后,调用write函数会报错服务器

self.finish()
self.write('en~~~~')

**将给定的HTTP错误发送到浏览器**网络

[`RequestHandler.send_error(status_code = 500,**kwargs) `](http://www.tornadoweb.org/en/stable/_modules/tornado/web.html#RequestHandler.send_error)函数

若是[`flush()`](http://www.tornadoweb.org/en/stable/web.html#tornado.web.RequestHandler.flush)已经被调用,则不可能发送错误,所以该方法将简单地终止响应。若是输出已写入但还没有刷新,则将其丢弃并替换为错误页面。tornado

覆盖[`write_error()`](http://www.tornadoweb.org/en/stable/web.html#tornado.web.RequestHandler.write_error)以自定义返回的错误页面。传递附加的关键字参数post

self.send_error(404)  #若是已经执行 self.flush() 则不会不能显示错误

**覆盖以实现自定义错误页面**

函数原型:

[`RequestHandler.write_error(*status_code*,**\* kwargs *)`](http://www.tornadoweb.org/en/stable/_modules/tornado/web.html#RequestHandler.write_error)

`write_error`能够调用[`write`](http://www.tornadoweb.org/en/stable/web.html#tornado.web.RequestHandler.write),[`render`](http://www.tornadoweb.org/en/stable/web.html#tornado.web.RequestHandler.render),[`set_header`](http://www.tornadoweb.org/en/stable/web.html#tornado.web.RequestHandler.set_header)等,以产生输出。

def write_error(self, status_code, **kwargs):
  self.write("---%d----\n"%status_code)

经过重写`write_error`方法,能够实现自定义的输出错误。

**设置响应的状态代码**

[`RequestHandler.set_status(status_code,reason = None)`](http://www.tornadoweb.org/en/stable/_modules/tornado/web.html#RequestHandler.set_status)

参数:

\- status_code(int) - 响应状态码。

\- reason(string) - 描述状态代码的人类可读缘由短语。

self.set_status(404,'error')

2.响应头的设置

以谷歌浏览器为例:按下F12,能够打开浏览器自带的控制台,咱们选择Network,这里咱们能够看到浏览器在页面上没有看到的信息。打开以后刷新一下,选择以后就能够看到:`General`,`Respnse Headers`和`Request Headers`

`General`:是请求中基本信息,`Respnse Headers`是相应信息,`Request Headers`是请求信息,在服务器端能够设置给浏览器的相应信息。

(r'/header',HeadersHandler),
class HeadersHandler(tornado.web.RequestHandler):
    def get(self):
        self.write('headers')
        self.set_header('budong',18)
        self.set_header('changsha','hunan')

函数原型:

[`RequestHandler.set_header(name, value)`](http://www.tornadoweb.org/en/stable/_modules/tornado/web.html#RequestHandler.set_header)

若是值不是字符串,咱们将其转换为字符串。而后将全部标题值编码为UTF-8

`self.set_header`能够设置本身的须要的响应头

**添加给定的响应头和值**

函数原型:

[`RequestHandler.add_header(*name*, *value*)`](http://www.tornadoweb.org/en/stable/_modules/tornado/web.html#RequestHandler.add_header)

不一样[`set_header`](http://www.tornadoweb.org/en/stable/web.html#tornado.web.RequestHandler.set_header),[`add_header`](http://www.tornadoweb.org/en/stable/web.html#tornado.web.RequestHandler.add_header)可能会屡次调用以返回相同键的多个值。相同的键`set_header`只能返回一个值

self.set_header('jingqi','20')
self.add_header('jingqi','19')
self.add_header('jingjing','0731')

 **撤消先前的set_header调用**

有添加,就会有删除,函数原型:

[`RequestHandler.clear_header`(*name*)](http://www.tornadoweb.org/en/stable/_modules/tornado/web.html#RequestHandler.clear_header)

self.clear_header('changsha')

**相应头的执行顺序**

class IndexHandler(tornado.web.RequestHandler):
    def set_default_headers(self):
        print(' ---set_default_headers---:设置header'+'<br>')

    def initialize(self):
        print(' ---initialize---:初始化'+'<br>')

    def prepare(self):
        print(' ---prepare---:准备工做'+'<br>')

    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---:处理错误'+'<br>')

    def on_finish(self):
        print(' ---on_finish---:结束,释放资源'+'<br>')
相关文章
相关标签/搜索