5、flask-會話

會話是客戶端登錄到服務(wù)器并注銷服務(wù)器的時間間隔。需要在該會話中保存的數(shù)據(jù)會存儲在服務(wù)器上的臨時目錄中。

這個對象相當于用密鑰簽名加密的 cookie ,即用戶可以查看你的 cookie ,但是如果沒有密鑰就無法修改它

會話會為每個客戶端的會話分配會話ID。會話數(shù)據(jù)存儲在cookie的頂部,服務(wù)器以加密方式對其進行簽名

一個實現(xiàn)了簡單登錄功能的demo:

from flask import Flask, session, redirect, url_for, request

# 創(chuàng)建一個app實例
app = Flask(__name__)

"""
必須創(chuàng)建一個 secret_key,創(chuàng)建方法:
import os
print(os.urandom(16))
"""
app.secret_key = '\xf9\x84L<\x12/;\xcfg\xdf\x18!I:\xa3\x8e?\xed\x08O'


# 主頁面,如果有會話數(shù)據(jù)則顯示登陸人,如果沒有會話數(shù)據(jù)則提示跳轉(zhuǎn)到登錄
@app.route('/')
def root():
    if 'username' in session:
        username = session['username']
        return f"{username} 正在訪問主頁<br/><a href='/logout'>點擊這里注銷</a>"
    return "未登錄, 無法訪問該頁面<br/><a href='/login'>點擊這里登錄</a>"


# 登錄,如果發(fā)送的是post請求則去進行校驗,校驗通過跳轉(zhuǎn)到主頁面,如果發(fā)送的是get請求則顯示登錄頁面
@app.route('/login', methods=['POST', 'GET'])
def login():
    if request.method == 'POST':
        session['username'] = request.form['username']
        return redirect(url_for('root'))
    return '''
        <form action = "" method = "post">
            <p><input type="text" name="username"/></p>
            <p><input type="submit" value ="登錄"/></p>
        </form>
    '''


# 刪除會話并且跳轉(zhuǎn)到主頁
@app.route('/logout')
def logout():
    session.pop('username', None)
    return redirect(url_for('root'))


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

效果:

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容