當前位置:網站首頁>flask入門教程(7) - 會話

flask入門教程(7) - 會話

2022-01-27 19:33:01 Ejasmine

會話

flask提供了session對象,即會話。允許你在不同請求之間儲存信息。這個對象相當於用密鑰簽名加密的cookie,即用戶可以查看你的cookie,但是如果沒有密鑰就無法修改它:
在這裏插入圖片描述
這是我的網站詞神上的cookie,大家可以打開我的網站進行查看。

使用會話之前你必須設置一個密鑰。這之前我們就講解過,所以這裏直接跳過,上代碼:

import os

from flask import Flask, render_template, session

app = Flask(__name__)
app.config["SECRET_KEY"] = os.urandom(24)

@app.route("/")
def index():
    if not session.get("name"):
        session["name"] = "pynickle"
    return render_template("index.html")

if __name__ == "__main__":
    app.run(port=5050, debug=True)

注意,session.get函數用於獲取session中的值,如果不存在會返回None而不是報錯。

打開網站,查看cookie:
在這裏插入圖片描述
可以看見我們的session,已經被加密過了。

持久性

session是由持久性的,正常session在瀏覽器關閉後删除,那麼如何讓session保留更長時間呢,這時候就需要我們的permanent屬性:

session.permanent = True

這樣的話會使用配置中的PERMANENT_SESSION_LIFETIME作為session的持續時間。這個配置是一個datetime.timedelta對象,具體timedelta的介紹可以看這裏:datetime.timedelta
以下我們用一個例子說明這個過期時間,下面是業餘內容,能看就看,不强求:

import os
from datetime import timedelta
import time

from flask import Flask, render_template, session, jsonify

app = Flask(__name__)
app.config["SECRET_KEY"] = os.urandom(24)
app.config["PERMANENT_SESSION_LIFETIME"] = timedelta(seconds=5)

@app.before_first_request
def before_first_request():
    print("before first request")
    session.permanent = True

@app.route("/")
def index():
    if not session.get("name"):
        session["name"] = "pynickle"
    print(session.get("name"))
    return render_template("index.html")

@app.route("/get")
def get_session():
    return jsonify(session.get("name"))

if __name__ == "__main__":
    app.run(port=5050, debug=True)

jsonify函數是用來json化的,before_first_request裝飾器則是在app第一次請求前執行,首先訪問首頁,session存儲成功,接著立刻訪問get頁面,你應該能看到pynickle,過個10多秒,刷新,這時候你就能看到null,也就是到過期時間了,删除了。

下次見!

版權聲明
本文為[Ejasmine]所創,轉載請帶上原文鏈接,感謝
https://cht.chowdera.com/2022/01/202201271933007298.html

隨機推薦