在 Python Flask 中,cookie 是一種儲存在使用者瀏覽器中的小型資料塊。通常情況下,我們使用 cookie 來記錄使用者的首選設定、登錄資料以及其他與使用者相關的資訊。在 Flask 應用程式中,使用 cookie 的過程非常簡單。
設置 cookie 要在 Flask 中設置 cookie,我們需要使用 response 物件的 set_cookie()
方法。這個方法接受以下參數:
key
:cookie 的名稱,必須是一個字符串
value
:cookie 的值,必須是一個字符串,默認為空字符串
max_age
:cookie 的存活時間,以秒為單位,默認為 None
以下是一個簡單的 Flask 應用程式,演示如何設置 cookie:
1 2 3 4 5 6 7 8 9 from flask import Flask, make_response app = Flask(__name__)@app.route('/' ) def index (): resp = make_response('Setting a cookie!' ) resp.set_cookie('my_cookie' , 'my_value' ) return resp
在上面的程式碼中,我們建立了一個名為 my_cookie
的 cookie,其值為 my_value
。當使用者訪問該頁面時,他們的瀏覽器將接收到這個 cookie。
讀取 cookie 要讀取 cookie,我們可以使用 request 物件的 cookies
屬性。這個屬性是一個字典,其中包含了所有使用者瀏覽器中的 cookie。以下是一個簡單的 Flask 應用程式,演示如何讀取 cookie:
1 2 3 4 5 6 7 8 from flask import Flask, request app = Flask(__name__)@app.route('/' ) def index (): my_cookie = request.cookies.get('my_cookie' ) return f'The value of my_cookie is {my_cookie} '
在上面的程式碼中,我們使用 request.cookies.get()
方法讀取名為 my_cookie
的 cookie。如果該 cookie 存在,它的值將被存儲在 my_cookie
變數中。否則,my_cookie
將為 None
。
刪除 cookie 要刪除 cookie,我們只需要設置 cookie 的 max_age
參數為 0。以下是一個簡單的 Flask 應用程式,演示如何刪除 cookie:
1 2 3 4 5 6 7 8 9 from flask import Flask, make_response app = Flask(__name__)@app.route('/' ) def index (): resp = make_response('Deleting a cookie!' ) resp.set_cookie('my_cookie' , '' , max_age=0 ) return resp
在上面的程式碼中,我們建立了一個名為 my_cookie
的 cookie,並將其 max_age
設置為 0。這意味著該 cookie 的存活時間為 0 秒,瀏覽器將立即刪除它。
使用 session 雖然 cookie 是一種非常方便的儲存使用者設置和資料的方式,但是在一些情況下,它們可能不夠安全。為了增強安全性,Flask 提供了一種名為 session 的機制,它會在伺服器端儲存使用者資料,並使用一個加密的 cookie 將使用者資料傳遞給使用者瀏覽器。以下是一個簡單的 Flask 應用程式,演示如何使用 session:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 from flask import Flask, session app = Flask(__name__) app.secret_key = 'my_secret_key' @app.route('/' ) def index (): session['my_session' ] = 'my_value' return 'Setting a session!' @app.route('/get_session' ) def get_session (): my_session = session.get('my_session' ) return f'The value of my_session is {my_session} '
在上面的程式碼中,我們使用 session
物件儲存使用者資料。在設置 session 時,我們可以像設置字典一樣設置 session 的鍵和值。在讀取 session 時,我們使用 session.get()
方法。需要注意的是,使用 session 時需要設置 app.secret_key
屬性,該屬性是用於加密 session 的關鍵。
使用情境 以下是使用 Python Flask 框架來實現一些使用 Cookie 的範例:
使用者身份驗證 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 from flask import Flask, request, make_response app = Flask(__name__)@app.route('/' ) def index (): resp = make_response('Welcome!' ) resp.set_cookie('user_id' , '123' ) return resp@app.route('/dashboard' ) def dashboard (): user_id = request.cookies.get('user_id' ) if user_id == '123' : return 'Dashboard' else : return 'Unauthorized'
在上面的程式碼中,當使用者訪問首頁時,我們設置了一個名為 user_id
的 cookie,其值為 123
。當使用者訪問儀表板頁面時,我們讀取了 user_id
cookie 的值,並檢查其是否等於 123
。如果相等,則返回儀表板頁面,否則返回未經授權的錯誤。
記住使用者首選設置 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 from flask import Flask, request, make_response app = Flask(__name__)@app.route('/' ) def index (): lang = request.cookies.get('lang' , 'en' ) resp = make_response(f'Language: {lang} ' ) resp.set_cookie('lang' , lang) return resp@app.route('/set_lang/<lang>' ) def set_lang (lang ): resp = make_response('Language set!' ) resp.set_cookie('lang' , lang) return resp
在上面的程式碼中,我們讀取了名為 lang
的 cookie 的值,並將其用作網站的語言。如果 cookie 不存在,我們默認使用英語。當使用者訪問網站時,我們將 lang
cookie 的值設置為當前語言。如果使用者訪問 /set_lang/<lang>
頁面,我們將 lang
cookie 的值設置為使用者指定的語言。
記住使用者在線狀態 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 from flask import Flask, request, make_response app = Flask(__name__)@app.route('/' ) def index (): resp = make_response('Welcome!' ) resp.set_cookie('online' , 'true' ) return resp@app.route('/logout' ) def logout (): resp = make_response('Logged out!' ) resp.set_cookie('online' , 'false' ) return resp
在上面的程式碼中,當使用者訪問首頁時,我們設置了一個名為 online
的 cookie,其值為 true
,表示使用者在線。當使用者訪問登出頁面時,我們將 online
cookie 的值設置為 false
,表示使用者離線。
記住使用者的購物車 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 from flask import Flask, request, make_response app = Flask(__name__)@app.route('/' ) def index (): resp = make_response('Welcome to our store!' ) resp.set_cookie('cart' , '' ) return resp@app.route('/add_to_cart/<item>' ) def add_to_cart (item ): cart = request.cookies.get('cart' ) if cart: cart += f',{item} ' else : cart = item resp = make_response(f'{item} added to cart!' ) resp.set_cookie('cart' , cart) return resp@app.route('/view_cart' ) def view_cart (): cart = request.cookies.get('cart' ) if cart: items = cart.split(',' ) return f'Items in your cart: {", " .join(items)} ' else : return 'Your cart is empty'
在上面的程式碼中,當使用者訪問首頁時,我們設置了一個名為 cart
的 cookie,其值為空,表示使用者的購物車是空的。當使用者訪問加入到購物車頁面時,我們讀取 cart
cookie 的值,將新的項目加入到購物車中,然後更新 cart
cookie 的值。當使用者訪問查看購物車頁面時,我們讀取 cart
cookie 的值,並顯示購物車中的所有項目。
記住使用者的瀏覽歷史 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 from flask import Flask, request, make_response app = Flask(__name__)@app.route('/' ) def index (): resp = make_response('Welcome to our store!' ) resp.set_cookie('history' , '' ) return resp@app.route('/view_product/<product>' ) def view_product (product ): history = request.cookies.get('history' ) if history: products = history.split(',' ) if product not in products: history += f',{product} ' else : history = product resp = make_response(f'Viewing product: {product} ' ) resp.set_cookie('history' , history) return resp@app.route('/view_history' ) def view_history (): history = request.cookies.get('history' ) if history: products = history.split
總結 在 Flask 中,使用 cookie 是一種非常簡單和方便的方式,可以儲存使用者設置和資料。在上面的教學中,我們學習了如何設置、讀取和刪除 cookie,以及如何使用 session 增強安全性。通過這些方法,我們可以更加靈活地設計 Flask 應用程式,以滿足不同的需求。
參考資料
OverIQ :簡單介紹 Flask 中如何使用 set_cookie()
方法設置 cookie。
GeeksforGeeks :提供 Flask cookie 的概述,並介紹如何設置和讀取 cookie。
Flask documentation :官方 Flask 文件,提供全面的關於 cookie 的指南,包括如何設置、讀取、刪除 cookie,以及使用 session。
Python Basics :簡單介紹在 Flask 中如何使用 make_response()
函數和 set_cookie()
方法來設置 cookie。
Stack Overflow :Stack Overflow 討論串,討論了在 Flask 中設置 cookie 會面臨的問題以及如何解決。
Protutorialplus :提供了如何在 Python Flask 中設置和讀取 cookie 的簡單教學。