11.4 Flask session,闪现
session
加密后放在用户浏览器的 cookie 中
于django 的自带session 不同,flask 的 session 需要导入
from flask import session
添加密钥
app.secret_key = "sdfsdgrgasdgewrgw"
内部流程
# - Flask中的session处理机制(内置:将session保存在加密cookie中实现)
# - 请求刚到来:获取随机字符串,存在则去“数据库”中获取原来的个人数据
# 否则创建一个空容器。 --> 内存:对象(随机字符串,{放置数据的容器})
# 1. obj = 创建SecureCookieSessionInterface()
# 2. obj = open_session(self.request) = SecureCookieSession()
# self.session = SecureCookieSession()对象。
# self.session = self.app.open_session(self.request)
# - 视图:操作内存中 对象(随机字符串,{放置数据的容器})
# - 响应:内存对象(随机字符串,{放置数据的容器})
# - 将数据保存到“数据库”
# - 把随机字符串写在用户cookie中。
操作
完全类似于字典操作
# 设置值:
session['key'] = 'xxx' # 取值:
val = session.get('key','')
val = session['key'] # 删除:
del session['key']
流程
请求到来 ---> 视图函数 ----> 请求结束
当请求刚到来:
flask读取cookie中session对应的值:eyJrMiI6NDU2LCJ1c2VyIjoib2xkYm95,将该值解密并反序列化成字典,放入内存以便视图函数使用。
视图函数:
注意需要设置 secret_key 不然会报错的。相当于加盐操作密钥。
设置 session 和取 session 都是基于字典操作,和 django 差不多
app.config['SECRET_KEY'] = os.urandom(24) @app.route('/hello')
def hello_world():
session["error"] = "hahah"
print(session.values())
return 'Hello World!' @app.route('/hi')
def hi():
return session.get("error", "没有")
可以设置session 的保存时间,默认是31天
app.config['PERMANENT_SESSION_LIFETIME']=timedelta(days=7) #设置session的保存时间。
session.permanent=True # 将这个调整为 Trun 的时候才可以让上面的时间生效
当请求结束:
flask会读取内存中字典的值,进行序列化+加密,写入到用户cookie中。
自定义session
第三方session
使用方式
基于 flask_session 的在 redis 中的session操作
#!/usr/bin/env python
# -*- coding:utf-8 -
import redis
from flask import Flask, session
from flask_session import Session app = Flask(__name__)
app.debug = True
app.secret_key = 'xxxx' app.config['SESSION_TYPE'] = 'redis' # session类型为redis
app.config['SESSION_PERMANENT'] = False # 如果设置为True,则关闭浏览器session就失效。
app.config['SESSION_USE_SIGNER'] = False # 是否对发送到浏览器上session的cookie值进行加密
app.config['SESSION_KEY_PREFIX'] = 'session:' # 保存到session中的值的前缀
app.config['SESSION_REDIS'] = redis.Redis(host='127.0.0.1', port='', password='') # 用于连接redis的配置 Session(app) @app.route('/index')
def index():
session['k1'] = 'v1'
return 'xx' if __name__ == '__main__':
app.run()
取舍
如果应用程序比较小,就用原生的加密ccokie 保存session(内置) 如果应用程序比较大,就用redis(flask-session)
闪现
在session中存储一个数据,读取时通过pop将数据移除
应用场景
通常用于对临时数据的操作
实现的效果:
创建后只能使用一次。使用完就消失了。
无类别的闪现
from flask import Flask, flash, redirect, render_template
request, url_for app = Flask(__name__)
app.secret_key = b'_5#y2L"F4Q8z\n\xec]/' @app.route('/')
def index():
return render_template('index.html') @app.route('/login', methods=['GET', 'POST'])
def login():
error = None
if request.method == 'POST':
if request.form['username'] != 'admin' or request.form['password'] != 'secret':
error = 'Invalid credentials'
else:
flash('You were successfully logged in')
return redirect(url_for('index'))
return render_template('login.html', error=error)
带类别的
from flask import Flask,flash,get_flashed_messages,request,redirect
from werkzeug.datastructures import ImmutableMultiDict
app = Flask(__name__)
app.secret_key = 'asdfasdf' @app.route('/index')
def index():
val = request.args.get('v')
if val == 'oldboy':
return 'Hello World!'
# 向某个地方设置一个值,category参数是分类的意思
flash('超时错误',category="x1")
return "ssdsdsdfsd"
# return redirect('/error') @app.route('/error')
def error():
"""
展示错误信息
:return:
"""
# 从某个地方获取设置过的所有值,并指定分类,并清除。
data = get_flashed_messages(category_filter=['x1'])
if data:
msg = data[0]
else:
msg = "..."
return "错误信息:%s" %(msg,) if __name__ == '__main__':
app.run()
更多的详情 点击这里
11.4 Flask session,闪现的更多相关文章
- Flask - 请求响应 | session | 闪现 | 请求扩展 | 中间件
请求响应 flask的请求信息都在request里 flask的响应方式有四剑客,也可以自定义响应 请求相关信息 # request.method 提交的方法 # request.args get请求 ...
- Flask消息闪现
目录 Flask消息闪现 简单的例子 闪现消息的类别 过滤闪现消息 Message Flashing 参考 Flask消息闪现 一个好的应用和用户界面都需要良好的反馈.如果用户得不到足够的反馈,那么应 ...
- Flask Flash闪现
Flash介绍以及工作方式 flash中添加消息 取出flash中的消息 Flash介绍以及工作方式 - 介绍: flash :闪现 一个好的应用和用户界面都需要良好的反馈. 如果用户得不到足够的反馈 ...
- flask-admin章节四:flask session的使用
1. 关于session flask session可能很多人根本都没有使用过,倒是cookie大家可能使用得比较多.flask cookie使用起来比较简单,就两个函数,读取和设置. 具体使用方式如 ...
- Flask Session 详解
会话session ,允许你在不同请求 之间储存信息.这个对象相当于用密钥签名加密的 cookie ,即用户可以查看你的 cookie ,但是如果没有密钥就无法修改它. from flask impo ...
- Flask Session 使用和源码分析 —— (6)
基本使用 from flask import Flask, session, redirect, url_for, escape, request app = Flask(__name__) @app ...
- flask session
flask session工作机制: 把敏感数据经过加密后放入到‘session’中,然后在把'session'存放到cookie中,下次请求的时候,再从浏览器发送过来的cookie中读取sessio ...
- 搞懂分布式技术11:分布式session解决方案与一致性hash
搞懂分布式技术11:分布式session解决方案与一致性hash session一致性架构设计实践 原创: 58沈剑 架构师之路 2017-05-18 一.缘起 什么是session? 服务器为每个用 ...
- 【Flask】Flask Session操作
### session:1. session的基本概念:session和cookie的作用有点类似,都是为了存储用户相关的信息.不同的是,cookie是存储在本地浏览器,session是一个思路.一个 ...
随机推荐
- Arcgis for Javascript 对接iServer发布的Mapserver服务
测试说明 webgis开发流程一般是: 数据处理 ---发布服务---SDK开发.除了开源的服务以外,一般各GIS厂商都是自己的服务自己的SDK才能对接. SuperMap iServer 提供了将 ...
- MongoDB 常用的数据备份梳理汇总
1.基于数据文件的备份 直接将原始的数据文件Copy至备份的地方,这个方法的优点是比较快,因为备份和恢复都不需要转换数据格式.缺点就是需要锁住数据库服务器,但是此方案通常备份是在从节点上进行,备份过程 ...
- Windows 更快捷方便的安装软件,命令提示符上安装 Chocolatey
在命令提示符上安装 Chocolatey @powershell -NoProfile -ExecutionPolicy unrestricted -Command "iex ((new-o ...
- c/c++ 多线程 参数传递
多线程 参数传递 1,值传递,拷贝一份新的给新的线程.线程1中有个int变量a,在线程1中启动线程2,参数是a的值,这时就会拷贝a,线程1和线程2不共享a. 2,引用传递,不拷贝一份新的给新的线程.线 ...
- C#ComboBox绑定List
ComboBox绑定List时可能会错, public class Person { public string Name; public int Age; public int Heigth; } ...
- Ubuntu 16.04 启用 点击Launcher图标,窗口实现最小化 功能
安装了Ubuntu之后,要是每次都点击最小化按钮来实现窗口的最小化,操作起来很不方便,那么怎么样才能方便操作呢, Ubuntu 16.04 本身支持 点击应用程序Launcher图标实现最小化 功能, ...
- web渗透 学习计划(转载)
作者:向生李链接:https://www.zhihu.com/question/21914899/answer/39344435来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明 ...
- SQLServer之创建唯一聚集索引
创建唯一聚集索引典型实现 唯一索引可通过以下方式实现: PRIMARY KEY 或 UNIQUE 约束 在创建 PRIMARY KEY 约束时,如果不存在该表的聚集索引且未指定唯一非聚集索引,则将自动 ...
- (十二)Deleting Documents
Deleting a document is fairly straightforward. This example shows how to delete our previous custome ...
- iOS开发基础篇-Button基础
一.简单介绍 UIButton 的功能:响应用户操作.显示文字.显示图片.调整内部图片和文字的位置. 二. UIButton 的状态 UIControlStateNormal :普通状态,为默认情 ...