二、請求排程
三、請求鉤子
四、響應
請求-響應迴圈注:以下的請求意為flask收到的請求,不是向別的伺服器傳送的請求,此時你已經是伺服器了!響應同理。
首先我們要有乙個概念,請求物件,它封裝了客戶端傳送的http請求
python中預設為全域性變數,為了防止使用混亂,引入上下文概念
可視為一種區域性變數
flask中,上下文分為請求上下文與應用上下文
request : 請求物件,封裝了http請求
session : 記錄請求會話中資訊的字典
如:
user = request.args.get(
'user'
)# http請求
session[
'name'
]= user.
id# 字典的用法
session.get(
'name'
)
request 和 session 在請求結束後就會被重置
注意:request 和 session 是兩個變數名!不可變!下同理
關於 session 和 cookies ,參見:flask學習筆記(十六) cookie與session
通過response物件來操作,以鍵值對來讀寫 cookie
reps = response(
)reps.set_cookie(
'username'
,'hinzer'
)reps.delete_cookie(
"username"
)username = request.cookies.get(
"username"
)
g : 請求時用作臨時儲存物件,每次請求後被清空 如:
g.name=
'abc'
ps d:\桌面索引\程式設計\python\flask web開發\原始碼》 python
python 3.8
.1(tags/v3.
8.1:
1b293b6
, dec 18
2019,23
:11:46
)[msc v.
1916
64 bit (amd64)
] on win32
type "help",,
"credits"
or"license"
for more information.
>>
>
>>
map(
[(head, options, get)
-> index>
,(head, options, get)
-> static>
,(head, options, get)
-> text_2>
,(head, options, get)
-> text_1>
])
時在處理請求之前或之後執行**
flask支援以下4種鉤子:
before_first_request:註冊乙個函式,在處理第乙個請求之前執行。
before_request:註冊乙個函式,在每次請求之前執行。
after_request:註冊乙個函式,如果沒有未處理的異常丟擲,在每次請求之後執行。
teardown_request:註冊乙個函式,即使有未處理的異常丟擲,也在每次請求之後執行。
同時還需注意狀態碼,預設設為200,表示成功處理。若要單獨定義,則需把數字**作為第二個返回值
如:'/'
)def
index()
:return'',
400make_response()函式可接受引數和檢視函式的返回值一樣,返回乙個response物件
如:
from flask import make_response
'/')
defindex()
: response = make_response('')
response.set_cookie(
'answer'
,'42'
)return response
from flask import redirect
'/')
defindex()
:return redirect(
'')
需要注意的是,這樣寫會報錯:
'/')
defindex()
: response = make_response(redirect(
''))
報錯資訊:
typeerror: the view function did not
return a valid response.
the function either returned none
or ended without a return statement
原因:漏掉了return response 。。。
同時網上還有人這樣寫:flask通過make_response實現重定向
'/')def
index()
: headers =
# 使瀏覽器識別返回內容為字串而不是html
response = make_response("",
301)
# 瀏覽器接收到301狀態碼之後,會在headers中尋找location以重定向
response.headers = headers
return response
由abort函式生成
如:若url中動態引數id對應的使用者不存在,返回狀態碼404
from flask import abort
'/user/'
)def
text_2(id
):ifid
!=123
: abort(
404)
return''%
id
《Flask Web開發》學習筆記1
使用虛擬環境virtualenv 可以再python直譯器中避免包的混亂和版本的衝突。啟用虛擬環境 source venv bin activate結束虛擬環境 deactivatehello.py from flask import flask def index return 把index 函式...
Flask Web開發學習筆記(1)
新人小白的第一篇部落格,寫的不好,請見諒。參考書籍 flask web開發 基於python的web應用開發實戰 第乙個完整的程式 from flask import flask所有flask程式均需建立乙個程式例項 路由 處理url到python函式之間對映關係的程式 或許可理解為 說明url指向...
Flask Web學習筆記(五)
heroku官網 ps 建議用微軟的outlook郵箱和gmail郵箱去註冊 在 基於python的web應用開發實戰 這本書,裡面提及到 heroku toolbelt實際上裝了兩個工具 heroku客戶端和foreman工具,但其實 沒有foreman工具。安裝完heroku toolbelt之...