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...