Flask 实现登陆 + session

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()
posted @   爱文飞翔  阅读(10576)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
点击右上角即可分享
微信分享提示