记录#
- 今天学习的是 HTTP & SESSION。session 是一种存储方法,在用户的电脑中存储一些与用户相关的内容。
- 在存储 session 之前需要先建立 seeion_key,这个 key 不能泄露,否则用户的信息不安全。所以要把 key 存在环境变量中。
app.secret_key = os.environ['sessionKey']
- 需要存储的时候,调用 session 数据赋值就可以了。比如:
session["myName"]
- 使用
session.get("myName")
来判断变量是否存在。 - 使用
session.clear()
清除所有 session - 今天的练习是在昨天的基础之上增加用户名缓存的功能和注销的功能。
- 在今天的练习中还学了一个新的知识点,在 route 的设定中可以存在两个相同名称的路由,但后面的方法不能一样。就像代码中的 login 路由。
CODE#
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">Sign Up</a></p>
<p><a href="/log">Log In</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"Hello {session['name']}"
else:
page = f"{user['username']} exists"
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>Hello {session['name']}</h1><p><a href='/reset'>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 = "Username Or Password error"
return page
@app.route("/reset")
def reset():
session.clear()
return redirect("/log")
app.run(host='0.0.0.0', port=81)