Sessionについて
Sessionは簡単に言うと、ローカルの簡易データベースだ。JavaScriptで言うとlocalstorageみたいなものだ。Sessionを使うことによって、データベースにデータを保存する必要がなく、データをとってくることが可能になる。さらに、データベースに何度もアクセスする必要もなくなる。
階層
今回は仮想環境を用いているため、仮想環境を用いていない場合venvファイルは無視して良い。
プログラムコード
from flask import Flask, redirect, url_for, render_template, request, session #session追加
from datetime import timedelta #時間情報を用いるため
app = Flask(__name__)
app.secret_key = 'user'
app.permanent_session_lifetime = timedelta(minutes=5) # -> 5分 #(days=5) -> 5日保存
@app.route("/")
def home():
return render_template("index.html")
@app.route("/login", methods = ["POST", "GET"])
def login():
#データベースに情報を送るとき
if request.method == "POST":
session.permanent = True # <--- makes the permanent session
user = request.form["nm"] #ユーザー情報を保存する
session["user"] = user #sessionにuser情報を保存
return redirect(url_for("user"))
else: #情報を受け取るとき
if "user" in session: #sessionにユーザー情報があったとき
return redirect(url_for("user")) #userページに遷移
return render_template("login.html") #sessionにユーザー情報がなかったときはloginページに遷移
@app.route("/user")
def user():
if "user" in session:
user = session["user"] #sessionからユーザー情報をとってくる
return f"<h1>{user}</h1>"
else:
return redirect(url_for("login"))
@app.route("/logout") #ログアウトする
def logout():
session.pop("user", None) #削除
return redirect(url_for("login"))
if __name__ == "__main__":
app.run(debug=True)
sessionは辞書型となっており、今回はsessionにキーを"user"、値を入力したユーザー名をセットする。
書き込み
session["user"] = user
読み込み
user = session["user"]
こちらでも可能だ。
user = session.get("user")
session.get()でなかった場合はNoneが返る。
第2引数に値を入れると初期値を入れることができる
session.get('user', '名無し')
app.permanent_session_lifetime = timedelta(minutes=5)
これはどれくらい保存するかを設定している。上記のコードでは、5分間保存すると言うイメージだ。5日にしたい場合は、(days=5)
に変更すれば良い。
削除
session.pop('user', None)
永久に保存したい場合
session.permanent = True
と宣言する。
注意
ポイントは2つあって、from flask import Flask, session
で明示的にsessionをimportしている点と、app.secret_key
が必要な点。これがないと
RuntimeError: The session is unavailable because no secret key was set. Set the secret_key on the application to something unique and secret.
とエラーになる。
#参考
Sessions vs Cookies
Flask Tutorial #5 - Sessions
Flaskでセッションの読み書きをする