Tornado 系列學習筆記 一

2021-09-27 14:05:40 字數 4872 閱讀 7719

1.常見的兩種不適合採用多執行緒的應用場景:

epoll 是一種實現 系統層網路通訊的 解決方案.相比之前的解決方案, epoll有兩大特點:

具體看需求. 比如,如果是對返回的列表進行分頁,前端沒有傳遞per_page或page_num等約定的引數的時候, 我們應該設定預設值.

當某些引數是前端必傳的,而沒有傳遞的時候我們可以採用不設定預設值轉而丟擲異常的方式,進入異常處理的頁面邏輯, 比如404自定義頁面;

翻看原始碼發現: _arg_default=object() , 至於為什麼這樣設定呢? 主要是為了後面在方法內部進行邏輯校驗等處理的時候,能更好的區分

該內容是由前端引數傳遞過來的呢還是該方法取到的預設值. 所以必須要 _arg_default 和 傳過來的arg 有一定的區分度. 但是, 我們知道

我們沒法控制前端通過該引數傳遞什麼值到後端, 但是又要做到區分兩者是來自**. 所以解決方案一般是: is 身份判斷符來判斷. 所以, 這裡就

不能採用 不可變型別來做區分.

當對傳入引數值包含空格\t\tab等空白字元需要忽略的時候則需要截斷, 處理誤輸入;

當對傳入的引數值有嚴格完整性的要求時,就不截斷空白字元.

tornado.httputil.httpfile是接收到的檔案物件,它有三個屬性:

補充: python操作檔案, 在呼叫close的方法的時候才將記憶體中的內容寫入磁碟儲存起來; 但是我們可以呼叫flush方法,在乙個檔案控制代碼在寫的時候, 另外乙個檔案控制代碼就可以同步檢視了.

# 1 寫法一

write(header)

write(body)

# 2 寫法二

write(body)

write(header)

# 注: 這兩者的先後對報文最終"組裝"並無影響;

- 3.2 對於寫入響應頭不同item的順序, 會影響報文的順序
# 1.寫法一

write(header1)

write(header2)

# 2.寫法二

write(headr2)

write(header2)

- 3.2 對於寫入響應體不同item的順序, 會影響報文的順序
# 略

3.set_header(name, value)set_default_headers()

4.set_status(status_code, reason=none)

5.redirect

6.send_error(status_code=500, **kwargs)

小部分**示例, 更多**這裡:

# file: 08-response_.py

# *-* coding:utf8 *-*

"""涉及知識點:

1.write順序的講解

2.操作json響應

3.設定響應頭

4.狀態碼

5.redirect, 訪問: /login/

6.重點: 異常處理

# 1.順序的講解

# self.write("response 1

")# self.write("response 2

")# self.write("response 3

")# 2.操作json

user =

# 自己處理成json資料在傳遞給write(),看看有什麼不同?

# 自己處理成json, 則 會幫我們設定成 , 響應頭: content-type: text/html; charset=utf-8

json_str = json.dumps(user)

self.write(json_str)

# self.write(user)

# 3.設定響應頭

# 會先呼叫 set_default_headers 方法再呼叫 http的method方法, 如果在 http的method方法中操作了 set_header 方法,且該方法和

# set_default_headers 方法都操作了 相同的 響應頭的值, 那麼 set_header 會覆蓋 set_default_headers 的相關設定.

self.set_header(

"content-type",)

# utf-32

# 4.狀態碼

# self.set_status(666)

self.set_status(

200)

# 自己測試了一下, 會自動幫我們補充上

defset_default_headers

(self)

:print

"enter into func: %s"

%"set_default_headers"

self.set_header(

"content-type",)

# utf-8

class

loginhandler

(requesthandler)

:def

get(self)

: self.write('')

defpost

(self)

: self.redirect(

"/")

# 一般不直接寫path, 而是通過reverse_url來轉換

class

myerrordemohandler

(requesthandler)

:def

get(self)

:"""

self.write("error index")

# 注意:預設的write_error()方法不會處理send_error丟擲的kwargs引數,即上面的**中content="出現404錯誤"是沒有意義的。

self.send_error(404, content="出現404錯誤")

# 注意:使用send_error()方法後就不要再向輸出緩衝區寫內容了!

self.write("error end") # 不會處理

"""err_code = self.get_argument(

"code"

, u""

)# 注意返回的是unicode字串,下同

err_title = self.get_argument(

"title"

, u""

) err_content = self.get_argument(

"content"

, u""

)if err_code:

try:

err_code =

int(err_code)

except exception:

err_code =

400 self.send_error(err_code, title=err_title, content=err_content)

else

: self.write(

"error index"

)def

write_error

(self, status_code,

**kwargs)

: self.write(u""

) self.write(u"錯誤名:%s

"% kwargs[

"title"])

self.write(u"錯誤詳情:%s

vue系列學習筆記

1.v if 在vue.js中,我們使用v if指令實現同樣的功能 利用v if控制該元素有還是沒有 template v if 因為v if是乙個指令,需要將它新增到乙個元素上,但如果想切換多個元素,可以把乙個元素當作包裝元素,並在上面使用v if,最終的渲染結果不會包含它 例如2.v show ...

YOLO系列學習筆記

此文參考 1 給乙個大小為448x448的輸入影象,首先將影象劃分成7 7的網格。2 對於每個網格,每個網格 2個bouding box 每個box包含5個 量 以及20個類別概率,總共輸出7 7 2 5 20 1470個tensor 3 根據上一步可以 出7 7 2 98個目標視窗,然後根據閾值去...

Grpc系列學習 一

以下內容出自我的個人部落格 個人部落格 grpc系列學習 一 剛開始學習go的時候就想認識go有沒有類似與springcloud的分布式框架,也是那個時候得知了grpc.說來慚愧,對grpc的認識也僅僅停留在 我知道有這麼個東西,但是我不會用.因為準備寫一系列部落格,來開始重新拾起這個分布式框架.h...