Flask之flask-session的具体使用


Posted in Python onJuly 26, 2018

flask-session是flask框架的session组件,由于原来flask内置session使用签名cookie保存,该组件则将支持session保存到多个地方,如:

  • redis
  • memcached
  • filesystem
  • mongodb
  • sqlalchmey

安装

pip3 install flask-session

存储方式

redis

#!/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='6379', password='123123') # 用于连接redis的配置
 
Session(app)
 
@app.route('/index')
def index():
  session['k1'] = 'v1'
  return 'xx'
 
if __name__ == '__main__':
  app.run()

memcached

#!/usr/bin/env python
# -*- coding:utf-8 -
import redis
from flask import Flask, session
from flask_session import Session
import memcache
 
app = Flask(__name__)
app.debug = True
app.secret_key = 'xxxx'
 
app.config['SESSION_TYPE'] = 'memcached' # session类型为redis
app.config['SESSION_PERMANENT'] = True # 如果设置为True,则关闭浏览器session就失效。
app.config['SESSION_USE_SIGNER'] = False # 是否对发送到浏览器上session的cookie值进行加密
app.config['SESSION_KEY_PREFIX'] = 'session:' # 保存到session中的值的前缀
app.config['SESSION_MEMCACHED'] = memcache.Client(['10.211.55.4:12000']) 
 
Session(app) 
 
@app.route('/index')
def index():
  session['k1'] = 'v1'
  return 'xx'
 
if __name__ == '__main__':
  app.run()

filesystem

#!/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'] = 'filesystem' # session类型为redis
app.config[
  'SESSION_FILE_DIR'] = '/Users/wupeiqi/PycharmProjects/grocery/96.Flask新课程/组件/2.flask-session' # session类型为redis
app.config['SESSION_FILE_THRESHOLD'] = 500 # 存储session的个数如果大于这个值时,就要开始进行删除了
app.config['SESSION_FILE_MODE'] = 384 # 文件权限类型
 
app.config['SESSION_PERMANENT'] = True # 如果设置为True,则关闭浏览器session就失效。
app.config['SESSION_USE_SIGNER'] = False # 是否对发送到浏览器上session的cookie值进行加密
app.config['SESSION_KEY_PREFIX'] = 'session:' # 保存到session中的值的前缀
 
Session(app) 
@app.route('/index')
def index():
  session['k1'] = 'v1'
  session['k2'] = 'v1'
  return 'xx'
 
if __name__ == '__main__':
  app.run()

mongodb

#!/usr/bin/env python
# -*- coding:utf-8 -
import redis
from flask import Flask, session
from flask_session import Session
import pymongo
app = Flask(__name__)
app.debug = True
app.secret_key = 'xxxx'
 
app.config['SESSION_TYPE'] = 'mongodb' # session类型为redis
 
app.config['SESSION_MONGODB'] = pymongo.MongoClient()
app.config['SESSION_MONGODB_DB'] = 'mongo的db名称(数据库名称)'
app.config['SESSION_MONGODB_COLLECT'] = 'mongo的collect名称(表名称)'
 
app.config['SESSION_PERMANENT'] = True # 如果设置为True,则关闭浏览器session就失效。
app.config['SESSION_USE_SIGNER'] = False # 是否对发送到浏览器上session的cookie值进行加密
app.config['SESSION_KEY_PREFIX'] = 'session:' # 保存到session中的值的前缀
 
Session(app)
 
@app.route('/index')
def index():
  session['k1'] = 'v1'
  session['k2'] = 'v1'
  return 'xx'
 
if __name__ == '__main__':
  app.run()

mongodb操作简单示例:

#!/usr/bin/env python
# -*- coding:utf-8 -*-
from pymongo import MongoClient
 
# 创建链接
conn = MongoClient('47.93.4.198', 27017)
 
# 选择数据库
db = conn['db1']
 
# 选择表
posts = db['posts']
 
post_data = {
  'name': 'alex',
  'age': 18
}
 
# 表中插入数据
# result = posts.insert_one(post_data)
 
# 获取一条数据
# row = posts.find_one()
# print(row)
 
# # 获取多条数据
# rows = posts.find()
# for row in rows:
#   print(row)
 
# 删除多条数据
# rows = posts.delete_many(filter={})
# print(rows)
 
# 更新多条数据
# posts.update({}, {'name': 'wupeiqi'}) 
sqlalchemy
#!/usr/bin/env python
# -*- coding:utf-8 -
import redis
from flask import Flask, session
from flask_session import Session as FSession
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.debug = True
app.secret_key = 'xxxx'
 
# 设置数据库链接
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://root:123@127.0.0.1:3306/fssa?charset=utf8'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True
 
# 实例化SQLAlchemy
db = SQLAlchemy(app)

app.config['SESSION_TYPE'] = 'sqlalchemy' # session类型为sqlalchemy
app.config['SESSION_SQLALCHEMY'] = db # SQLAlchemy对象
app.config['SESSION_SQLALCHEMY_TABLE'] = 'session' # session要保存的表名称
app.config['SESSION_PERMANENT'] = True # 如果设置为True,则关闭浏览器session就失效。
app.config['SESSION_USE_SIGNER'] = False # 是否对发送到浏览器上session的cookie值进行加密
app.config['SESSION_KEY_PREFIX'] = 'session:' # 保存到session中的值的前缀
FSession(app)

@app.route('/index')
def index():
 
  session['k1'] = 'v1'
  session['k2'] = 'v1'
 
  return 'xx' 
 
if __name__ == '__main__':
  app.run()

PS: 在写好代码后,不要着急运行,需要先执行进入终端执行一条创建数据库表的命令:

bogon:pro-flask wupeiqi$ python3
Python 3.5.1 (v3.5.1:37a07cee5969, Dec 5 2015, 21:12:44)
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> from app import db
>>> db.create_all()
>>>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python用GET方法上传文件
Mar 10 Python
使用Turtle画正螺旋线的方法
Sep 22 Python
python判断自身是否正在运行的方法
Aug 08 Python
python3 求约数的实例
Dec 05 Python
pytorch模型预测结果与ndarray互转方式
Jan 15 Python
解决Tensorflow 内存泄露问题
Feb 05 Python
谈一谈数组拼接tf.concat()和np.concatenate()的区别
Feb 07 Python
Python闭包装饰器使用方法汇总
Jun 29 Python
用python实现前向分词最大匹配算法的示例代码
Aug 06 Python
TensorFlow中tf.batch_matmul()的用法
Jun 02 Python
刚学完怎么用Python实现定时任务,转头就跑去撩妹!
Jun 05 Python
python使用PySimpleGUI设置进度条及控件使用
Jun 10 Python
tensorflow saver 保存和恢复指定 tensor的实例讲解
Jul 26 #Python
python opencv旋转图像(保持图像不被裁减)
Jul 26 #Python
详解Django中间件的5种自定义方法
Jul 26 #Python
python opencv实现切变换 不裁减图片
Jul 26 #Python
Flask之flask-script模块使用
Jul 26 #Python
对tf.reduce_sum tensorflow维度上的操作详解
Jul 26 #Python
TensorFlow用expand_dim()来增加维度的方法
Jul 26 #Python
You might like
把从SQL中取出的数据转化成XMl格式
2006/10/09 PHP
SSI指令
2006/11/25 PHP
PHP Ajax实现页面无刷新发表评论
2007/01/02 PHP
JavaScript 创建对象和构造类实现代码
2009/07/30 Javascript
js 调用本地exe的例子(支持IE内核的浏览器)
2012/12/26 Javascript
js为什么不能正确处理小数运算?
2015/12/29 Javascript
javascript实现倒计时跳转页面
2016/01/17 Javascript
AngularJS HTML DOM详解及示例代码
2016/08/17 Javascript
BootStrap table使用方法分析
2016/11/08 Javascript
微信小程序 页面跳转传值实现代码
2017/07/27 Javascript
javaScript中"=="和"==="的区别详解
2018/03/16 Javascript
解决vue 打包发布去#和页面空白的问题
2018/09/04 Javascript
深入理解vue中的slot与slot-scope
2019/04/22 Javascript
JavaScript展开操作符(Spread operator)详解
2019/07/20 Javascript
jquery中attr、prop、data区别与用法分析
2019/09/25 jQuery
Javascript异步编程async实现过程详解
2020/04/02 Javascript
Vue实现移动端拖拽交换位置
2020/07/29 Javascript
JavaScript JSON使用原理及注意事项
2020/07/30 Javascript
python实现unicode转中文及转换默认编码的方法
2017/04/29 Python
python的继承知识点总结
2018/12/10 Python
python利用thrift服务读取hbase数据的方法
2018/12/27 Python
pyqt5 实现在别的窗口弹出进度条
2019/06/18 Python
Pandas透视表(pivot_table)详解
2019/07/22 Python
django 控制页面跳转的例子
2019/08/06 Python
Python实现微信中找回好友、群聊用户撤回的消息功能示例
2019/08/23 Python
在Pytorch中计算卷积方法的区别详解(conv2d的区别)
2020/01/03 Python
django迁移文件migrations的实现
2020/03/31 Python
使用Python文件读写,自定义分隔符(custom delimiter)
2020/07/05 Python
美国家喻户晓的保健品品牌:Vitamin World(维他命世界)
2016/08/19 全球购物
标准毕业生自荐信范文
2013/11/04 职场文书
计算机应用应届生求职信
2014/07/12 职场文书
党员教师四风问题整改措施思想汇报
2014/10/08 职场文书
学校通报表扬范文
2015/05/04 职场文书
故意杀人罪辩护词
2015/05/21 职场文书
家庭聚会祝酒词
2015/08/11 职场文书
MySQL8.0无法启动3534的解决方法
2021/06/03 MySQL