Flask Sessions會話
與Cookie不同,會話數據存儲在服務器上。 會話是客戶端登錄到服務器並註銷的時間間隔。 需要在此會話中進行的數據存儲在服務器上的臨時目錄中。
與每個客戶端的會話分配一個會話ID。 會話數據存儲在cookie頂部,服務器以加密方式簽名。 對於這種加密,Flask應用程序需要一個定義SECRET_KEY
。
會話對象也是一個包含會話變量和關聯值的鍵值對的字典對象。
例如,要設置'username'
會話變量,請使用語句 -
Session['username'] = 'admin'
要刪除會話變量,請使用pop()
方法。
session.pop('username', None)
以下代碼是Flask中會話如何工作的簡單演示。 URL => '/'
提示用戶登錄,因爲會話變量username
沒有設置。
@app.route('/')
def index():
if 'username' in session:
username = session['username']
return 'Logged in as ' + username + '<br>' + \
"<b><a href = '/logout'>click here to log out</a></b>"
return "You are not logged in <br><a href = '/login'></b>" + \
"click here to log in</b></a>"
當用戶瀏覽到URL=>'/login'
時,login()
函數顯示視圖,因爲它是通過GET方法調用的,所以打開一個登錄表單。
表單填寫後重新提交到URL=> /login
,現在會話變量被設置。 應用程序被重定向到URL=> /
。 這時找到會話變量:username
。
@app.route('/login', methods = ['GET', 'POST'])
def login():
if request.method == 'POST':
session['username'] = request.form['username']
return redirect(url_for('index'))
return '''
<form action = "" method = "post">
<p><input type = text name = "username"/></p>
<p<<input type = submit value = Login/></p>
</form>
'''
該應用程序還包含一個logout()
視圖函數,它刪除’username’會話變量的值。 再次 URL 跳轉到 ‘/‘ 顯示開始頁面。
@app.route('/logout')
def logout():
# remove the username from the session if it is there
session.pop('username', None)
return redirect(url_for('index'))
運行應用程序並訪問主頁(確保設置應用程序的secret_key
)。
from flask import Flask, session, redirect, url_for, escape, request
app = Flask(__name__)
app.secret_key = 'any random string’
完整代碼如下所示 -
from flask import Flask
from flask import render_template
from flask import request
from flask import make_response
from flask import Flask, session, redirect, url_for, escape, request
app = Flask(__name__)
app.secret_key = 'fkdjsafjdkfdlkjfadskjfadskljdsfklj'
@app.route('/')
def index():
if 'username' in session:
username = session['username']
return '登錄用戶名是:' + username + '<br>' + \
"<b><a href = '/logout'>點擊這裏註銷</a></b>"
return "您暫未登錄, <br><a href = '/login'></b>" + \
"點擊這裏登錄</b></a>"
@app.route('/login', methods = ['GET', 'POST'])
def login():
if request.method == 'POST':
session['username'] = request.form['username']
return redirect(url_for('index'))
return '''
<form action = "" method = "post">
<p><input type ="text" name ="username"/></p>
<p><input type ="submit" value ="登錄"/></p>
</form>
'''
@app.route('/logout')
def logout():
# remove the username from the session if it is there
session.pop('username', None)
return redirect(url_for('index'))
if __name__ == '__main__':
app.run(debug = True)
輸出將顯示如下。點擊鏈接「點擊這裏登錄」。
該鏈接將被引導至另一個界面。 輸入’admin’。
屏幕會顯示消息「登錄用戶名是:admin」。如下所示 -