第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

Flask 操作 Cookie

上節(jié)課我們說到網站為了辨別用戶身份、進行會話跟蹤需要把一些數據 (例如:登錄狀態(tài)、用戶名稱) 儲存在用戶本地終端上,這些數據被稱為 Cookie。說白了 Cookie 的作用和我們的身份證差不多,我們使用身份證向警察叔叔證明自己的身份,使用 Cookie 向網站證明自己的身份。這節(jié)課我們就來學習下如何使用 Flask Web 框架來操作 Cookie。

1. 程序簡介

1.1 程序功能

完成一個 Flask 程序,提供操作 Cookie 的 3 項功能,如下表所示:

頁面路徑 功能
/set_cookie 設置一個名稱為 ‘mooc’、值為 ‘idcbgp.cn’ 的 Cookie
/get_cooike 在服務端獲取名稱為 ‘mooc’ 的 Cookie,并將其值返回給客戶
/del_cooike 刪除名稱為 ‘mooc’ 的 Cookie

程序有 3 個源文件構成:

源文件 描述
app.py Flask 后端程序,提供操作 Cookie 的接口
templates/get_cookie.html 在服務端獲取 Cookie,顯示 Cookie 的值
templates/js_cookie.html 在客戶端通過 Javascript 顯示 Cookie 的值

1.2 源程序下載

2. 模板文件 get_cookie.html

瀏覽器訪問網站時,每次都會把 Cookie 發(fā)送給服務端,在服務端獲取 Cookie 并返回給瀏覽器,顯示的頁面模板如下所示:

<html>
<meta charset='UTF-8'>
<title>在服務端獲取 cookie</title>

<body>
<h2>在服務端獲取 cookie: <b>{{cookie}}<b/></h2>
</body>
</html>

服務端渲染 templates/get_cookie.html 時,將 Cookie 的值傳遞給頁面模板,在第 6 行,顯示 Cookie 的值。

3. 模板文件 js_cookie.html

Cookie 保存在客戶端,在客戶端可以使用 Javascript 讀取 Cookie 的值,代碼如下:

<html>
<meta charset='UTF-8'>
<title>在服務端設置 cookie</title>

<body>
<h2>在服務端設置 cookie</h2>
<h2>在客戶端通過 Javascript 讀取 cookie: <b id='cookie'><b/></h2>
</body>

<script> 
cookie = document.getElementById('cookie'); 
cookie.innerHTML = document.cookie;
</script> 
</html>

在第 7 行,定義了一個 id 為 ‘cookie’ 的 HTML 元素;在第 11 行,獲取 id 為 ‘cookie’ 的 HTML 元素;在第 12 行,document.cookie 是瀏覽器端保存的 cookie 值,在 id 為 ‘cookie’ 的 HTML 元素中顯示 cookie 的值。

4. 后端程序 app.py

4.1 引入相關模塊

#!/usr/bin/python3
from flask import Flask, request, Response, render_template
app = Flask(__name__)

從 flask 模塊中引入 request 對象,request.cookies 存儲了客戶端發(fā)送的 Cookie。

從 flask 模塊中引入 Response 類,頁面處理函數返回 Response 對象,而不是字符串。Response 對象提供了 set_cookie 和 delete_cookie 等方法用于設置 Cookie 相關的 HTTP 消息頭。

@app.route('/get_cookie')
def get_cookie():
    cookie = request.cookies.get('mooc')
    return render_template('get_cookie.html', cookie = cookie)

設置訪問頁面 /get_cookie 的處理函數 get_cookie,request.cookies.get (‘mooc’) 返回請求中名稱為 ‘mooc’ 的 Cookie 的值,將其傳遞給頁面模板 get_cookie.html。

@app.route('/set_cookie')
def set_cookie():
    html = render_template('js_cookie.html')
    response = Response(html) 
    response.set_cookie('mooc', 'idcbgp.cn')
    return response

設置訪問頁面 /set_cookie 的處理函數 set_cookie。在第 3 行,首先獲取頁面模板 js_cookie.html 的內容;在第 4 行,通過類 Response 創(chuàng)建一個 response 對象;在第 5 行,方法 respose.set_cookie () 產生一個 HTTP 的 Set-Cookie 消息頭;在第 6 行,頁面處理函數返回 response 對象,該對象包含有 Set-Cookie 消息頭。

Flask 框架將 response 對象發(fā)送給客戶端,在返回給瀏覽器的響應中,包含有 Set-Cookie 消息頭,瀏覽器收到這個消息頭后,會在本地存儲 Cookie 的值。因此,在 templates/js_cookie.html 文件中,可以通過 Javascript 讀取 Cookie 的值。

@app.route('/del_cookie')
def del_cookie():
    html = render_template('js_cookie.html')
    response = Response(html) 
    response.delete_cookie('mooc')
    return response

if __name__ == '__main__':
    app.run(debug = True)

設置訪問頁面 /del_cookie 的處理函數 del_cookie。在第 3 行,首先獲取頁面模板 js_cookie.html 的內容;在第 4 行,通過類 Response 創(chuàng)建一個 response 對象;在第 5 行,方法 respose.delete_cookie () 產生一個刪除 Cookie 的消息頭;在第 6 行,頁面處理函數返回 response 對象,該對象包含有刪除 Cookie 的消息頭。

Flask 框架將 response 對象發(fā)送給客戶端,在返回給瀏覽器的響應中,包含有刪除 Cookie 的消息頭,瀏覽器收到這個消息頭后,會在本地刪除 Cookie。因此,在 templates/set_cookie.html 文件中,通過 Javascript 讀取 Cookie 的值為空。

5. 運行程序

1. 在瀏覽器中輸入 http://localhost:5000/set_cookie,顯示如下:

圖片描述

在頁面 /set_cookie 的處理函數中,服務端設置了名稱為 ‘mooc’、值為 ‘idcbgp.cn’ 的 Cookie,在客戶端使用 Javascript 正確顯示出 Cookie 的值。

2. 在瀏覽器中輸入 http://localhost:5000/get_cookie,顯示如下:

圖片描述

在頁面 /get_cookie 的處理函數中,服務端通過 request.cookies [‘imooc’] 獲取客戶端發(fā)送的 Cookie 的值,將 Cookie 的值返回給瀏覽器顯示。

3. 在瀏覽器中輸入 http://localhost:5000/del_cookie,顯示如下:

圖片描述

在頁面 /del_cookie 的處理函數中,服務端刪除名稱為 ‘mooc’ 的 Cookie,在客戶端使用 Javascript 顯示出 Cookie 的值為空。

6. 小結

本節(jié)講解在 Flask 中如何設置、獲取、刪除 Cookie,使用思維導圖概括如下:

圖片描述

下個小節(jié)講解在 Flask 中如何操作 Session。