記録#
- 今日は HTTP & SESSION について学びました。session は、ユーザーのコンピュータにユーザーに関連するいくつかの内容を保存する方法です。
- session を保存する前に、まず session_key を作成する必要があります。この key は漏洩してはいけません。さもなければ、ユーザーの情報が安全ではなくなります。したがって、key は環境変数に保存する必要があります。
app.secret_key = os.environ['sessionKey']
- 保存が必要なときは、session データに値を代入するだけで済みます。例えば:
session["myName"]
session.get("myName")
を使用して、変数が存在するかどうかを判断します。session.clear()
を使用して、すべての session をクリアします。- 今日の練習は、昨日の基礎の上にユーザー名キャッシュ機能とログアウト機能を追加することでした。
- 今日の練習では、route の設定に同じ名前のルートが 2 つ存在できる新しい知識も学びましたが、後のメソッドは同じであってはいけません。コードの login ルートのように。
コード#
from flask import Flask, request, redirect, session
from replit import db
import os
app = Flask(__name__, static_url_path='/static')
app.secret_key = os.environ['secret_key']
@app.route("/")
def index():
if session.get("name"):
return redirect("/login")
else:
page = """
<p><a href="/sign">サインアップ</a></p>
<p><a href="/log">ログイン</a></p>
"""
return page
@app.route("/sign")
def sign():
if session.get("name"):
return redirect("/login")
else:
f = open("sign.html", "r")
page = f.read()
f.close
return page
@app.route("/signup", methods=["POST"])
def signup():
if session.get("name"):
return redirect("/login")
else:
user = request.form
if user["username"] not in db.keys():
db[user["username"]] = {
"username": user["username"],
"name": user["name"],
"password": user["password"]
}
session["name"] = user['name']
page = f"こんにちは {session['name']}"
else:
page = f"{user['username']} は存在します"
return page
@app.route("/log")
def log():
if session.get("name"):
return redirect("/login")
else:
f = open("login.html", "r")
page = f.read()
f.close
return page
@app.route("/login", methods=["GET"])
def sessionlogin():
if session.get("name"):
page = f"<h1>こんにちは {session['name']}</h1><p><a href='/reset'>リセット</a></p>"
return page
@app.route("/login", methods=["POST"])
def login():
user = request.form
if db[user["username"]]["username"] == user["username"] and db[
user["username"]]["password"] == user["password"]:
session["name"] = db[user["username"]]["name"] # ユーザー名をセッションに保存
return redirect("/login")
else:
page = "ユーザー名またはパスワードエラー"
return page
@app.route("/reset")
def reset():
session.clear()
return redirect("/log")
app.run(host='0.0.0.0', port=81)