1.输出

再来看看输出`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()`就是将当前输出缓冲区刷新到网络。

除了上面的`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)已经被调用,则不可能发送错误,因此该方法将简单地终止响应。如果输出已写入但尚未刷新,则将其丢弃并替换为错误页面。

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

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

Tornado输出和响应头的更多相关文章

  1. 接口测试——HttpClient工具的https请求、代理设置、请求头设置、获取状态码和响应头

    目录 https请求 代理设置 请求头设置 获取状态码 接收响应头 https请求 https协议(Secure Hypertext Transfer Protocol) : 安全超文本传输协议, H ...

  2. tornado 响应头 中断 状态码 工作流程

    set_header    设置响应头 clear_header 清除响应头 add_header   增加响应头 self.flush  self.finish  中断 set_status     ...

  3. 2.tornado请求与响应

    之前我们介绍了tornado的基础流程,但还遗留了一些问题.今天我们就来解决遗留问题并学习新的内容 settings,使用tornado.web.Application(handler, **sett ...

  4. PHP--获取响应头(Response Header)方法

    方法一: $baiduUrl = "http://www.baidu.com/link";   file_get_contents($baiduUrl); $responseInf ...

  5. 移除IIS默认的响应头(转载)

    转载地址:http://www.cnblogs.com/dudu/p/iis-remove-response-readers.html 在IIS+ASP.NET的运行环境,默认情况下会输出以下的响应头 ...

  6. 转:PHP--获取响应头(Response Header)方法

    转:http://blog.sina.com.cn/s/blog_5f54f0be0102uvxu.html PHP--获取响应头(Response Header)方法 方法一: ========== ...

  7. 服务器响应头隐藏X-power-by

    服务器响应头隐藏X-power-by 这个不是Apache或者Nginx输出的,而是由语言解析器或者应用程序框架输出的. 这个值的意义用于告知网站是用何种语言或框架编写的.例如: PHP标准输出是:X ...

  8. Android系列之网络(二)----HTTP请求头与响应头

    ​[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/ ...

  9. 移除IIS默认的响应头

    在IIS+ASP.NET的运行环境,默认情况下会输出以下的响应头(Response Headers): 那如何移除这些响应头呢?下面我们来一个一个移除. 1. 移除Server 借助IIS URL R ...

随机推荐

  1. JVM调优总结(一)

    数据类型 Java虚拟机中,数据类型可以分为两类:基本类型和引用类型.基本类型的变量保存原始值,即:他代表的值就是数值本身:而引用类型的变量保存引用值.“引用值”代表了某个对象的引用,而不是对象本身, ...

  2. Gradle命令详解与导入第三方包--快速打包

    快速打包app:gradlew assembleRelease --console plain (好使) 下边的方法暂时不好使,可以用的兄弟请教下哈! Android Studio + Gradle的 ...

  3. JavaEE之注解

    1注解:Annotation注解,是一种代码级别的说明.它是JDK1.5及以后版本引入的一个特性,与类.接口.枚举是在同一个层次,给计算机,JVM提供解读信息的. 2注解的作用:编译检查:代码分析,编 ...

  4. canal入门使用

    1.下载canal安装包: 地址:https://github.com/alibaba/canal/releases 图例: 2.将下载好的安装包复制到Linux,解压 3.修改配置文件 vi con ...

  5. Graph_Master(连通分量_A_双连通分量+桥)

    hdu 5409 题目大意:给出一张简单图,求对应输入的m条边,第i-th条边被删除后,哪两个点不连通(u,v,u<v),若有多解,使得u尽量大的同时v尽量小. 解题过程:拿到题面的第一反应缩点 ...

  6. eclipse格式化代码快捷键失效解决的一个基本方法

    eclipse格式化代码的快捷键Ctrl+Shift+F,是比较常用的一个快捷键之一. 但是用到时却发现按了也没有反应,百度了说是跟搜狗输入法的快捷键冲突了. 搜狗输入法的快捷键Ctrl+Shift+ ...

  7. LongestValidParentheses, 求最长合法括号子串长度-----同类问题ValidParentheses,GenerateParentheses

    问题描述:求括号字符串中最长合法子串长度.例如:()((),返回2,而不是4. 算法分析:还是利用栈,和判断合法括号对是一样的. public static int longestValidParen ...

  8. vue-cli 一分钟搭建自己的vue项目

    创建项目 1.安装全局vue-cli npm install vue-cli -g 2.生成项目模板(my_projuct为项目名称) vue init webpack my_projuct 3.进入 ...

  9. python tesseract-ocr 基础验证码识别功能(Windows)

    一.环境 windows 7 x64 Python 3 + 二.安装 1.tesseract-ocr安装 http://digi.bib.uni-mannheim.de/tesseract/ 2.py ...

  10. Prism开发人员指南5-WPF开发 文档翻译(纯汉语版)

    2014四月       Prism以示例和文档的形式帮助你更简单的设计丰富灵活易维护的WPF程序.其中使用的设计模式体现了一些重要的设计原则,例如分离关注点和松耦合,Prism帮助你利用松耦合组件设 ...