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遍历数组的方法小结
Apr 30 Python
用Python实现一个简单的能够上传下载的HTTP服务器
May 05 Python
5种Python单例模式的实现方式
Jan 14 Python
更改Ubuntu默认python版本的两种方法python-> Anaconda
Dec 18 Python
Python 遍历列表里面序号和值的方法(三种)
Feb 17 Python
Request的中断和ErrorHandler实例解析
Feb 12 Python
Python实现按照指定要求逆序输出一个数字的方法
Apr 19 Python
python3 遍历删除特定后缀名文件的方法
Apr 23 Python
Python 给某个文件名添加时间戳的方法
Oct 16 Python
Python编程中类与类的关系详解
Aug 08 Python
对Python中 \r, \n, \r\n的彻底理解
Mar 06 Python
Elasticsearch 基本查询和组合查询
Apr 19 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操作(删除,提取,增加)zip文件方法详解
2015/03/12 PHP
PHP的Yii框架中YiiBase入口类的扩展写法示例
2016/03/17 PHP
PHP生成加减算法方式的验证码实例
2018/03/12 PHP
php解析非标准json、非规范json的方式实例
2020/12/10 PHP
Gambit vs ForZe BO3 第三场 2.13
2021/03/10 DOTA
js创建对象的几种常用方式小结(推荐)
2010/10/24 Javascript
JQuery中对服务器控件 DropdownList, RadioButtonList, CheckboxList的操作总结
2011/06/28 Javascript
30个精美的jQuery幻灯片效果插件和教程
2011/08/23 Javascript
javascript原生和jquery库实现iframe自适应高度和宽度
2014/07/18 Javascript
JavaScript中使用Object.create()创建对象介绍
2014/12/30 Javascript
仿JQuery输写高效JSLite代码的一些技巧
2015/01/13 Javascript
jQuery Html控件基本操作(日常收集整理)
2016/03/11 Javascript
JavaScript 中调用 Kotlin 方法实例详解
2017/06/09 Javascript
vue组件实现可搜索下拉框扩展
2020/10/23 Javascript
基于vue v-for 多层循环嵌套获取行数的方法
2018/09/26 Javascript
js中事件对象和事件委托的介绍
2019/01/21 Javascript
JS实现的杨辉三角【帕斯卡三角形】算法示例
2019/02/26 Javascript
利用JavaScript的Map提升性能的方法详解
2019/08/14 Javascript
Node使用Selenium进行前端自动化操作的代码实现
2019/10/10 Javascript
Vue实现input宽度随文字长度自适应操作
2020/07/29 Javascript
Python3处理文件中每个词的方法
2015/05/22 Python
Django中使用 Closure Table 储存无限分级数据
2019/06/06 Python
pandas 使用均值填充缺失值列的小技巧分享
2019/07/04 Python
Tensorflow轻松实现XOR运算的方式
2020/02/03 Python
使用python+poco+夜神模拟器进行自动化测试实例
2020/04/23 Python
virtualenv介绍及简明教程
2020/06/23 Python
CSS3 border-radius圆角的实现方法及用法详解
2020/09/14 HTML / CSS
巴西家用小家电购物网站:Polishop
2016/08/07 全球购物
德国百年厨具品牌WMF美国站:WMF美国
2016/09/12 全球购物
Nanushka官网:匈牙利服装品牌
2019/08/14 全球购物
What is view? why do we have view?
2012/06/22 面试题
电子商务专业个人的自我评价
2013/11/19 职场文书
庆元旦迎新年广播稿
2014/02/18 职场文书
销售口号大全
2014/06/11 职场文书
2015年食品安全工作总结
2015/05/15 职场文书
详细谈谈MYSQL中的COLLATE是什么
2021/06/11 MySQL