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()
Flask 实现登陆 + session的更多相关文章
- flask 状态保持session和上下文session的区别
问题场景: 在falsk项目中导入了两个session: 首先,配置文件config.py文件中 有个 flask_session扩展导入了Session ( from flask_sessi ...
- flask笔记(三)Flask 添加登陆验证装饰器报错,及解析
Flask 添加登陆验证装饰器报错,及解析 写这个之前,是想到一个需求,这个是关于之前写Flask笔记(二)中的一个知识点,路由相关 需求为 : 有一些页面必须是登陆之后才能访问的,比如Shoppin ...
- 【flask】登陆后返回之前重定向跳转的页面
登陆后返回之前重定向跳转的页面 一.前言 实现强制跳转到登陆页面,登陆后返回之前的页面的功能.网上跳登陆页面的很多:返回之前页面功能没多少.这里我只是用了自己的方法,有缺点和其他方法也请指点!(´ε` ...
- Flask中的session机制
cookie和sessioncookie:网站中,http请求是无状态的,第一次和服务器连接后并且登陆成功后,第二次请求服务器依然不能知道当前请求是哪个用户.cookie的出现就是解决了改问题,第一次 ...
- Flask的插件session、SQLAlchemy、Script、Migrate
一.flask-session 1.为什么要使用flask-session 因为flask默认的session是通过请求上下文放入到Local中的,是存在内存的,而使用flask-session可以更 ...
- flask基础之session原理详解(十)
前言 flask_session是flask框架实现session功能的一个插件,用来替代flask自带的session实现机制,flask默认的session信息保存在cookie中,不够安全和灵活 ...
- flask中cookie,session的存储,调用,删除 方法(代码demo)
# -*- encoding: utf-8 -*- # cookie,session的存储,调用,删除 from flask import Flask,make_response,request,se ...
- flask总结之session,websocket,上下文管理
1.关于session flask是带有session的,它加密后存储在用户浏览器的cookie中,可以通过app.seesion_interface源码查看 from flask import Fl ...
- Flask 上下文管理-- (session,request,current_app的传递)--类似本地线程实现,以及多app应用
Flask session,request,current_app的传递 请求上下文的作用 -- 封装请求相关得数据(request,session) 请求上下文 request session re ...
随机推荐
- hangfire控制台应用程序中添加控制面板
1.使用nuget 管理包安装 Microsoft.AspNet.WebApi.OwinSelfHost 2.根目录添加新建类 名为:Startup.cs public class Startup { ...
- protobuf使用
一.protobuf环境搭建 Github 地址: https://github.com/protocolbuffers/protobuf 然后进入下载页 https://github.com/pro ...
- QT中添加图片资源
1.在ui设计界面中添加label,用于显示图片 2.添加QT资源文件 往项目中添加新文件,选择QT分类中的资源文件,名称为"myImage",其他选项默认. 3.添加资源 在项目 ...
- .Net Core个人笔记
目录 前言 IOC注册 三种生命周期 如何注册一个IOC服务 .Net Core部署IIS之后500错误 管道和中间件 示意图 管道方法 中间件 加日志观看 使用MVC MVC服务注入 MVC管道调用 ...
- 【优化技巧】指数移动平均EMA的原理
前言 在深度学习中,经常会使用EMA(exponential moving average)方法对模型的参数做平滑或者平均,以求提高测试指标,增加模型鲁棒性. 参考 1. [优化技巧]指数移动平均(E ...
- [LeetCode] 97. Interleaving String 交织相错的字符串
Given s1, s2, s3, find whether s3 is formed by the interleaving of s1and s2. Example 1: Input: s1 = ...
- STM32F405的内部ADC采集
1. ADC的初始化部分基本一致,下面是引脚复用配置 void HAL_ADC_MspInit(ADC_HandleTypeDef *hadc) { GPIO_InitTypeDef GPIO_Ini ...
- Lyrics of the song 99 Bottles of Beer
99 bottles of beer on the wall, 99 bottles of beer.Take one down and pass it around, 98 bottles of b ...
- 在ensp上利用单臂路由实验VLAN间路由
我们为什么要设置单臂路由? 因为我们要解决不同vlan,不同网络的PC机间的通信问题~ 那它为啥叫单臂路由嘞? 单臂路由的原理时通过一台路由器,使vlan间互通数据通过路由器进行三层转发,如果在路由器 ...
- LeetCode 976. 三角形的最大周长(Largest Perimeter Triangle) 33
976. 三角形的最大周长 976. Largest Perimeter Triangle 题目描述 给定由一些正数(代表长度)组成的数组 A,返回由其中三个长度组成的.面积不为零的三角形的最大周长. ...