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
英文地址,請注明出處:http://en.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…