知識點: 1、HttpResponse 2、Cookie
一、概況
檢視在接收HttpRequest並處理後,必須返回HttpResponse物件。目前檢視函式只是返回字串,之後 Flask 將字串轉換為響應物件。如果你要顯式地轉換,你可以使用make_response()
函式然後再進行修改。
二、HttpResponse
我們新建一個名為cookie.html
的模板,簡單寫上下面程式碼:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>設定cookie</h1>
</body>
</html>
複製程式碼
我們在後臺用make_response()
返回HttpResponse:
from flask import Flask, render_template, make_response
app = Flask(__name__)
@app.route('/setcookie', methods=['GET', 'POST']) # 支援get、post請求
def setcookie(): # 檢視函式
resp = make_response(render_template('cookie.html')) # 顯式轉換成HttpResponse物件
return resp
app.config['DEBUG'] = True
if __name__ == '__main__':
# 0.0.0.0代表任何能代表這臺機器的地址都可以訪問
app.run(host='0.0.0.0', port=5000) # 執行程式
複製程式碼
我們訪問瀏覽器試一下:
三、Cookie
我們都知道HTTP
協議是無狀態的請求協議,使用者這次訪問和下一次訪問都是新的請求,它們之間是沒任何關係的。但是我們需要知道上一次訪問使用者做了什麼操作,就需要用到cookie。cookie是網站以鍵值對格式儲存在瀏覽器中的一段純文字資訊,用於實現使用者跟蹤。cookie是基於域安全的
我們通過set_cookie
方法設定cookie
from flask import Flask, render_template, make_response
app = Flask(__name__)
@app.route('/setcookie', methods=['GET', 'POST']) # 支援get、post請求
def setcookie(): # 檢視函式
resp = make_response(render_template('cookie.html')) # 顯式轉換成HttpResponse物件
resp.set_cookie('nickname', 'laowang') # 設定cookie
resp.set_cookie('age', "12") # 設定cookie
return resp
app.config['DEBUG'] = True
if __name__ == '__main__':
# 0.0.0.0代表任何能代表這臺機器的地址都可以訪問
app.run(host='0.0.0.0', port=5000) # 執行程式
複製程式碼
我們訪問瀏覽器試一下:
我們已經瀏覽器寫入瞭如下資訊,當我們下一次請求的時候,會自動把本地的cookie傳給後臺。我們通過HttpReqeust物件把我們瀏覽器的cookies取到,我們新寫一個檢視把cookie取到:
@app.route('/getcookie', methods=['GET', 'POST']) # 支援get、post請求
def getcookie(): # 檢視函式
nickname = request.cookies.get('nickname')
age = request.cookies.get('age')
return 'nickname=%s age=%s' % (nickname, age)
複製程式碼
我們訪問瀏覽器試一下:
我們已經在後臺把瀏覽器本地的cookie取到了。過期時間:
cookie是有過期時間的,當我們設定cookie的時候可以直接給cookie設定過期時間,有如下幾種設定方法:
- max_age是一個整數,表示在指定秒數後過期。
- expires是一個datetime或timedelta物件,會話將在這個指定的日期/時間過期。
- max_age與expires二選一。
- 如果不指定過期時間,在關閉瀏覽器時cookie會過期。
from flask import Flask, request, render_template, make_response
from datetime import datetime
app = Flask(__name__)
@app.route('/setcookie', methods=['GET', 'POST']) # 支援get、post請求
def setcookie(): # 檢視函式
resp = make_response(render_template('cookie.html')) # 顯式轉換成HttpResponse物件
resp.set_cookie('nickname', 'laowang', max_age=3600) # 設定cookie 3600秒過期
resp.set_cookie('age', "12", expires=datetime(2019, 3, 18)) # 設定cookie,2019年3月18後過期
return resp
@app.route('/getcookie', methods=['GET', 'POST']) # 支援get、post請求
def getcookie(): # 檢視函式
nickname = request.cookies.get('nickname')
age = request.cookies.get('age')
return 'nickname=%s age=%s' % (nickname, age)
app.config['DEBUG'] = True
if __name__ == '__main__':
# 0.0.0.0代表任何能代表這臺機器的地址都可以訪問
app.run(host='0.0.0.0', port=5000) # 執行程式
複製程式碼
我們訪問瀏覽器試一下:
我們可以清楚地看到,一個cookie是一小時後過期,一個則是2019年3月18後過期。刪除cookie:
我們可以通過delete_cookie
方法刪除cookie
@app.route('/delcookie', methods=['GET', 'POST']) # 支援get、post請求
def delcookie(): # 檢視函式
res = make_response('刪除cookie')
res.delete_cookie('nickname') # 刪除的cookie的本質就是改變cookie的過期時間
return res
複製程式碼
歡迎關注我的公眾號: