要使用 cookies 可以使用 cookies 屬性
透過 set_cookie 方法
from flask import make_response
@app.route('cookie/set/')
def index():
resp = make_response('Setting cookie!')
resp.set_cookie('username', '')
return resp
可以看到我們設定了一個叫做username
內容是the username
的 cookie
透過 get 方法取得 cookie 內容
@app.route('/cookie/get/')
def cookie_get():
username = request.cookies.get('username')
# use cookies.get(key) instead of cookies[key] to not get a
# KeyError if the cookie is missing.
return f'cookie username = {username}'
只需要把 cookie 的expires
設為 0 就自動刪除了!
在使用 session 之前需要設定一組密鑰作為加密使用
好的密鑰應該是隨機產生,可以使用指令產生一組隨機的字串作為密鑰
python -c 'import os; print(os.urandom(16))'
from flask import session, redirect, url_for
# Set the secret key to some random bytes. Keep this really secret!
app.secret_key = b'_5#y2L"F4Q8z\n\xec]/'
@app.route('/session/')
def session_index():
if 'username' in session:
return f'Logged in as {session["username"]}'
return 'You are not logged in'
@app.route('/session/login/', methods=['GET', 'POST'])
def session_login():
if request.method == 'POST':
session['username'] = request.form['username']
return redirect(url_for('session_index'))
return '''
<form method="post">
<p><input type=text name=username>
<p><input type=submit value=Login>
</form>
'''
@app.route('/session/logout/')
def session_logout():
# remove the username from the session if it's there
session.pop('username', None)
return redirect(url_for('session_index'))
一開始進入畫面,因為我們的 session 裡面沒有 username 這個鍵值
所以顯示尚未登入
使用 GET 方法存取了 login 頁面,顯示表單內容
按下按鈕後發送 POST 請求到當前頁面
路由判斷是 POST 請求,建立 session 並且重新跳轉到初始畫面
而初始畫面這次就有取得 session 中的 username 鍵值,所以顯示對應的值
在 /logout/ 路由中,使用session.pop()
刪除指定的 session
那個None
是什麼意思呢?如果 session key 不存在會引發 KeyError
而給他一個 None 作為預設值的話就可以避免這個問題
因為 Session 這個類別是一種 Dict 型別:dict.pop()
pop(key[, default])
當 key 存在的時候會移除他並且回傳內容
若是不存在則回傳 default 內容,如果這時候 default 不存在就會引發 KeyError