• 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()
    
  • 相关阅读:
    Vue中使用axios时post传参之请求体带参
    MyBatisPlus常用功能之简介
    常用命令一二三之练习题
    常用命令之三
    常用命令之二
    常用命令之一
    阿里云之轻量文件分布式服务器-fastDFS
    js三座大山之三:异步和单线程
    js三座大山之二:作用域和闭包
    run build时内存溢出打包失败的解决办法
  • 原文地址:https://www.cnblogs.com/an-wen/p/11582222.html
Copyright © 2020-2023  润新知