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编写简单爬虫资料汇总
Mar 22 Python
Python微信公众号开发平台
Jan 25 Python
numpy中实现二维数组按照某列、某行排序的方法
Apr 04 Python
使用Python横向合并excel文件的实例
Dec 11 Python
Python API自动化框架总结
Nov 12 Python
用python中的matplotlib绘制方程图像代码
Nov 21 Python
Python序列类型的打包和解包实例
Dec 21 Python
TensorFlow tensor的拼接实例
Jan 19 Python
python同义词替换的实现(jieba分词)
Jan 21 Python
tensorflow 实现自定义layer并添加到计算图中
Feb 04 Python
详解Django配置JWT认证方式
May 09 Python
解决python3安装pandas出错的问题
May 20 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
php json转换相关知识(小结)
2018/12/21 PHP
Javascript中暂停功能的实现代码
2007/03/04 Javascript
jQuery中$.fn的用法示例介绍
2013/11/05 Javascript
判定是否原生方法的JS代码
2013/11/12 Javascript
jquery获取复选框被选中的值
2014/04/10 Javascript
一个JavaScript用逗号分割字符串实例
2014/09/22 Javascript
jQuery 1.9.1源码分析系列(十三)之位置大小操作
2015/12/02 Javascript
JavaScript 七大技巧(一)
2015/12/13 Javascript
BootStrap无限级分类(无限极分类封装版)
2016/08/26 Javascript
浅谈js对象的创建和对6种继承模式的理解和遐想
2016/10/16 Javascript
jQuery中的select操作详解
2016/11/29 Javascript
JQuery validate 验证一个单独的表单元素实例
2017/02/17 Javascript
详解javascript中的变量提升和函数提升
2018/05/24 Javascript
react组件从搭建脚手架到在npm发布的步骤实现
2019/01/09 Javascript
jQuery实现左右两个列表框的内容相互移动功能示例
2019/01/27 jQuery
vue+web端仿微信网页版聊天室功能
2019/04/30 Javascript
vue props default Array或是Object的正确写法说明
2020/07/30 Javascript
PyQt5每天必学之像素图控件QPixmap
2018/04/19 Python
用python编写第一个IDA插件的实例
2018/05/29 Python
Python OpenCV对本地视频文件进行分帧保存的实例
2019/01/08 Python
Python根据欧拉角求旋转矩阵的实例
2019/01/28 Python
对Django url的几种使用方式详解
2019/08/06 Python
如何解决django-celery启动后迅速关闭
2019/10/16 Python
TripAdvisor台湾:全球最大旅游网站
2018/08/26 全球购物
巴西葡萄酒商店:Divvino
2020/02/22 全球购物
个人找工作的自我评价
2013/10/17 职场文书
汽车驾驶求职信
2013/10/25 职场文书
日语专业毕业生自荐信
2013/11/11 职场文书
会计电算化学生个人的自我评价
2014/02/08 职场文书
《临死前的严监生》教学反思
2014/02/13 职场文书
工作失职检讨书(精华篇)
2014/10/15 职场文书
义卖募捐活动总结
2015/05/09 职场文书
家长会主持词开场白
2015/05/29 职场文书
婚礼双方父亲致辞
2015/07/27 职场文书
关于使用Redisson订阅数问题
2022/01/18 Redis
python基础之//、/与%的区别详解
2022/06/10 Python