tornado学习笔记day04-执行顺序

响应输出 -> write

原型

self.write()函数

源码中是这样定义的

def write(self, chunk: Union[str, bytes, dict]) -> None:

作用

将chunk数据写到缓冲区

刷新缓冲区的四种方式

  • 程序中断
  • 手动刷新
  • 缓冲区满了
  • 遇到\n

当你写了一个print之后,不是直接就显示在黑屏中断上面的,而是先到缓冲区走一个趟

只是我们python演示不了,这个得用C语言来演示,还得是Linux系统才行,两种条件都不具备

C程序演示

这里我们需要gcc或者g++(编译C++的)

# include<stdio.h>
int main(){while(1){printf("hello");sleep(0.05);}return 0;
}

基础

代码演示

class WriteHandler(RequestHandler):def get(self):self.write("write page info tornado!")self.write("write page nicie tornado!")self.write("write page coll tornado!")self.write("write page beautiful tornado!")'''你会发现他们是连着的,因为我都写在了缓冲区里面'''# 刷新缓冲区, 并关闭当前请求通道self.finish()# 如果我不写他,当我们的程序结束,他也会刷新了# 下面这行就写丢了self.write("write page wonderful tornado!")

利用write方法写JSON数据

在Django那时候是不是有JsonResponse
比如在豆瓣影评
当我们往下滚轮的时候请求JSON数据
在本地通过创建DOM的方式进行加载的

接口调用顺序

方法

initialize()

prepare()

  • 作用: 预处理方法,在执行对应的请求方法之前调用
  • 注意:
    • 任何一种HTTP请求,都会执行prepare()方法
    • 这个prepare有点想Django里面的中间件,但是中间件能够在之前或者之后来执行
    • 这个只是在HTTP方法之前执行
    • 能够用于一些,比如反爬虫,我要是不想让你正常请求,不给你响应内容,那我这里直接来个error直接跳过write就OK了
    • 判断用户是否符合规格

HTTP方法

get(参数在URL后面)

  • 优点:速度快
  • 缺点:承载的数据量低,安全性相对低

post(参数单独打包)

  • 优点:速度慢
  • 缺点:承载的数据量高,安全性相对高了那么一丢丢
  • 一般用于修改服务器上面的数据,使用post,其他的就用get吧

head

类似get请求,只不过响应中没有具体的内容,用于获取报头的,一般你不会用

delete

请求服务器删除指定的资源的

put

从客户端向服务器传送指定的内容

patch

请求修改局部内容

options

返回URL支持所有的HTTP方法

set_default_headers()方法

write_error()方法

on_finish()方法

  • 作用:在请求处理结束后调用
  • 应用:
    • 我们能在改方法中进行一个资源的清理释放
    • 或者说一个日志的处理
      这个内存释放,我们通常不处理,以为这个python也有自带的垃圾回收机制
    • 我们可以对于数据分析的原资料
    • 比如对于访客的身份统计,喜好判断,对于调整本站的内容排行有所参考
  • 注意:
    • 尽量不要在该方法中进行相应输出
    • 这里做的是服务器内部的一些处理,不能关客户端的事儿

我们可以进行打印出来看一看

class IndexHandler(RequestHandler):def initialize(self) -> None:print("init_initialize")def prepare(self):print("prepare")def get(self):print("get_start")self.write("main page info tornado!")def set_default_headers(self) -> None:print(":set_default_headers")def write_error(self, status_code: int, **kwargs: Any) -> None:print("write_error")def on_finish(self) -> None:print("on_finish")

执行的结果顺序如下

:set_default_headers
init_initialize
prepare
get_start
on_finish

另一种方式,带有错误的情况

class IndexHandler(RequestHandler):def initialize(self) -> None:print("init_initialize")def prepare(self):print("prepare")def get(self):self.send_error(500)print("get_start")self.write("main page info tornado!")def set_default_headers(self) -> None:print(":set_default_headers")def write_error(self, status_code: int, **kwargs: Any) -> None:print("write_error")self.write("服务器内部错误!!!")def on_finish(self) -> None:print("on_finish")

执行的结果顺序如下

:set_default_headers
init_initialize
prepare
:set_default_headers
write_error
on_finish
get_start

执行的顺序总结

  • 在正常情况下,没抛出错误时
    • :set_default_headers:设置头
    • init_initialize:初始化处理
    • prepare:预处理,预处理也需要头,所以在他后面
    • get_start:开始处理
    • on_finish:善后
  • 抛出错误时
    • set_default_headers:
    • init_initialize:
    • prepare:
    • set_default_headers:又重新执行了一遍头,这里
    • write_error:
    • on_finish:
    • get_start:

这个顺序你得记住,其实也不用,你要是忘了就回来看就行了,但是你要理解其中的每个函数的作用

相似文章

tornado学习笔记day01
tornado学习笔记day02
tornado学习笔记day03
tornado学习笔记day04
tornado学习笔记day05
tornado学习笔记day06
tornado学习笔记day07
tornado学习笔记day08

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/455241.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/455241.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

字符串中文判断

2019独角兽企业重金招聘Python工程师标准>>> 1、判断字符串是否全是中文或含有中文 <?php header(Content-type:text/html; charsetutf-8); $str 你好; if(preg_match(/^[\x{4e00}-\x{9fa5}]$/u, $str)>0){ echo 全是中文; …

angular使用动态组件后属性值_Angular动态加载组件

引言有时候需要根据URL来渲染不同组件&#xff0c;我所指的是在同一个URL地址中根据参数的变化显示不同的组件&#xff1b;这是利用Angular动态加载组件完成的&#xff0c;同时也会设法让这部分动态组件也支持AOT。动态加载组件下面以一个Step组件为示例&#xff0c;完成一个3个…

分治2--取余运算

分治2--取余运算 一、心得 二、题目和分析 题目描述 输入b&#xff0c;p&#xff0c;k的值&#xff0c;求bp mod k的值。其中b&#xff0c;p&#xff0c;k*k为长整型数。输入 三个整数&#xff0c;分别为b&#xff0c;p&#xff0c;k的值输出 bp mod k样例输入 2 10 9样例输出 …

-mysql-锁机制分为表级锁和行级锁

2019独角兽企业重金招聘Python工程师标准>>> 声明&#xff1a;本栏目所使用的素材都是凯哥学堂VIP学员所写&#xff0c;学员有权匿名&#xff0c;对文章有最终解释权&#xff1b;凯哥学堂旨在促进VIP学员互相学习的基础上公开笔记。 mysql锁机制分为表级锁和行级锁 …

tornado学习笔记day05-访问数据库

模板## 配置模板路径 这个在之前我们已经配置好了,可以参考前面的文章 settings {# 就像upfile就没有,你写了也白扯template_path: os.path.join(BASE_DIR, "templates"), }渲染并返回给客户端 使用render()方法 class HomeIndexHandler(RequestHandler):def ge…

pythonelectron桌面开发案例_使用Electron开发基于Node.js的桌面应用

最近小编在查看分享资料时&#xff0c;发现一个可以开发跨平台桌面应用的框架——NW.js(原名&#xff1a;node-webkit)。正当小编兴致勃勃的研究NW.js的时候&#xff0c;最基础的安装环节出了问题。无论用npm还是cnpm都无法完整下载所依赖的包(具体原因待考察)。鉴于此&#xf…

x264_param_t结构体参数分析

参考网上的一些资料&#xff0c;结合个人的理解&#xff0c;对x264中x264_param_t结构体作了初步的分析&#xff0c;不保证正确。对x264熟悉的朋友可以在这基础上修改添加typedef struct x264_param_t{/* CPU 标志位 */unsigned int cpu;int i_threads; /* 并行编…

知识点总结

1、把一个类转换成一个xml&#xff0c;首先&#xff0c;类名前需要加特性&#xff0c;[DataContract(Namespace "http://CYSoft.Services/AuthorizationObject")]&#xff0c;[XmlRoot("Org")]&#xff0c;里边的名字为根节点的名字&#xff0c;对各个属性…

tornado学习笔记day06-应用安全

应用安全 cookie 普通cookie 一般我们的用户表中都有啥呢 你在购物的时候,加入购物车,让你登录,那你登录之后,他怎么知道你登录了呢 token 这个值是随机的,存在cookie里面 设置 原型: 设置cookie 的方法 def set_cookie(self,name: str,value: Union[str, bytes],domai…

托福试卷真题_干货解答考生疑惑,自考真题考过了还会在出吗?

重视真题&#xff01;重视真题&#xff01;重视真题&#xff01;重要的话要说三遍。想自考的你们一定要注意&#xff0c;对于历年真题&#xff0c;从来都是“备考必做”的态度。做自考真题&#xff0c;除了可以让自己尽快熟悉考试题型和考点外&#xff0c;还有什么好处呢&#…

x264 struct学习 1

x264_t 结构体维护着CODEC的诸多重要信息 其中成员frames是一个指示和控制帧编码过程的结构。其中current是已经准备就绪可以编码的帧&#xff0c;其类型已经确定&#xff1b;next是尚未确定类型的帧&#xff1b;unused用于回收不使用的frame结构体以备今后再次使用。 struct …

2016 ACM/ICPC Asia Regional Dalian Online

自己还是太菜&#xff0c;补题离不开题解。。。 但还是留个博客&#xff0c;万一以后忘了。。。 1001 Different Circle Permutation Polya定理&#xff0c;第一次遇见&#xff0c;学习了一下。不旋转的时候可以得到 f[i]f[i-1]f[i-2] 斐波那契数列&#xff0c;旋转后就可以通过…

tornado学习笔记day07-同步与异步

同步 概念 同步就是按部就班的依次执行我们的代码 进阶 但是有些情况我们有一些比较耗时的从操作,比如去别的地方拿点资源,去其他网站请求数据,去访问数据库,上传文件等等,所以这里面优点瑕疵,有小编一一道来 比如这样 本模块的功能:<同步异步demo># 这个就相等于一个…

关键字: on

关键字: on 数据库在通过连接两张或多张表来返回记录时&#xff0c;都会生成一张中间的临时表&#xff0c;然后再将这张临时表返回给用户。 在使用left jion时&#xff0c;on和where条件的区别如下&#xff1a; 1、 on条件是在生成临时表时使用的条件&#xff0c;它不管on中的条…

天融信安全接入客户端_天融信提示您警惕物联网设备Ripple20漏洞风险

近日&#xff0c;天融信阿尔法实验室在JSOF实验室发布的由Treck公司开发的TCP/IP软件库中获取到一系列0day漏洞。JSOF实验室发布的这批漏洞共计19个&#xff0c;被JSOF研究人员称为"Ripple20"。受此软件库影响的产品数量估计超过数亿&#xff0c;其中包括智能家居设备…

Service-Oriented Architecture,SOA(转)

http://blog.csdn.net/WOOSHN/article/details/8036910 介绍&#xff1a; IT体系结构已非常成熟&#xff0c;它是一种成功处理典型IT问题的方法。体系结构中一个受到很大重视且相对较新的分支是面向服务的体系结构(SOA)。SOA经常被吹捧为企业用于解决应用程序灵活性和高维护成本…

tornado学习笔记day08-tornado中的异步

概述 应为epoll主要用来解决网络的并发问题,所以tornado中的异步也是主要体现在网络的IO异步上,即异步web请求 tornado.httpclient.AsyncHTTPClient tornado提供异步web请求客户端,可以用来进行异步web请求, 这个客户端和服务端是相对来说的,当tornado的Handler去其他位置去…

GreenSock (TweenMax) 动画案例(二)

实现效果 动画分解 1.灯光闪烁2.文字出现3.水流4.心电图 知识点 1.AI(可尽情骚扰UI欧巴)2.SVG(了解基本的知识点)3.TweenMax(GreenSock)4.CSS animation 写在前面 写过第一篇文章后GreenSock (TweenMax) 动画案例(一)再回头看发现代码太多&#xff0c;根本没耐心去看完。所以每…

vue 用key拿对象value_利用 WeakMap 对 Vue 新建数组中的对象赋予 :key

需求在 Vue 中&#xff0c;对组件进行循环都需要加入key以便“就地复用”&#xff0c;可是在某些情况下&#xff0c;我们需要新建多个对象&#xff0c;而这些对象不是从后端获取到的&#xff0c;而是前端生成的&#xff0c;没有唯一值&#xff0c;且 Vue 目前版本只允许字符串&…

无限轮播图片的实现原理

无限轮播图相信是很多开发人员常用的一个功能&#xff0c;这里总结一下常用的两种方式的实现原理 一、使用UIScrollview实现无限轮播用UIScrollView实现&#xff0c;在scrollView上添加3个UIImageView&#xff0c;分别用来显示上一张图片&#xff0c;当前显示的图片&#xff0c…