Flask框架從入門到精通之Response(七)

〆 小源。發表於2019-04-30

知識點: 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
複製程式碼

歡迎關注我的公眾號:

image

相關文章