Flask 實現登錄 + session
案例一:
# -*- coding: utf-8 -*-
# @Time : 2019/9/24 16:26
# @Author : AnWen
from flask import Flask, render_template, request, redirect, session
app = Flask(__name__)
app.secret_key = '!@#$%^&*()11'
app.debug = True
@app.route('/login', methods=['GET', 'POST'])
def login():
if request.method == 'GET':
return render_template('login.html')
if request.method == 'POST':
if request.form.get('username') == 'anwen':
session['user'] = request.form.get('username')
return redirect('/')
# 交由客戶端保管機制
# 開啓session['ursernsm'] = request.form.get('username')
# {"username":anwen}
# 序列化字典 == 字符串
# 加密字符串 Secret key 密鑰字符串
#
# 接受反序列化Session;從cookie中獲取到一個session key的值
# 經過Secretkey 解密session
# 反序列化成字典
@app.route('/')
def index():
print(session.get('user'))
return render_template('index.html')
if __name__ == '__main__':
app.run()
案例二:
# 1 、要求:
# 1.登陸頁面
# 2.學生概況頁面 ID name 點擊詳情
# 3.學生詳情頁面 ID name age gender
# 2.使用session驗證登陸狀態
# 思考:如何記錄登陸次數
# 3.基於Session編寫登陸驗證裝飾器
# 思考:如何給兩個以上的視圖函數增長裝飾器
from flask import Flask, request, redirect, render_template, session
from functools import wraps
USER = {'username': 'anwen', 'password': "123"}
STUDENT_DICT = {
1: {'name': 'Old', 'age': 38, 'gender': '中'},
2: {'name': 'Boy', 'age': 73, 'gender': '男'},
3: {'name': 'EDU', 'age': 84, 'gender': '女'},
}
app = Flask(__name__)
app.secret_key = "!@#$%^&*()"
app.debug = True
# 裝飾器裝飾多個視圖函數
def wrapper(func):
@wraps(func) # 保存原來函數的全部屬性,包括文件名
def inner(*args, **kwargs):
# 校驗session
if session.get("user"):
ret = func(*args, **kwargs) # func = home
return ret
else:
return redirect("/login")
return inner
# 首頁
@app.route('/')
@wrapper
def index():
# if session.get('user'):
return render_template('index.html')
# else:
# return redirect("/login")
# 登陸
@app.route('/login', methods=["GET", "POST"])
def login():
if request.method == 'GET':
return render_template('login.html')
if request.method == 'POST':
if request.form.get("username") == USER["username"] and request.form.get("password") == USER["password"]:
session["user"] = request.form.get("username")
return redirect("/")
else:
return redirect("/login")
# 學生概況頁面
@app.route('/desc')
@wrapper
def desc():
# if session.get("user"):
return render_template('desc.html', stu_dic=STUDENT_DICT)
# else:
# return redirect("/login")
# 學生詳情頁面
@app.route('/info')
@wrapper
def info():
# if session.get("user"):
return render_template('info.html', stu_dic=STUDENT_DICT)
# else:
# return redirect("/login")
if __name__ == '__main__':
app.run()