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语言中的按位运算符
Nov 26 Python
仅用50行Python代码实现一个简单的代理服务器
Apr 08 Python
Python实现的简单算术游戏实例
May 26 Python
python中input()与raw_input()的区别分析
Feb 27 Python
用python记录运行pid,并在需要时kill掉它们的实例
Jan 16 Python
python实现闹钟定时播放音乐功能
Jan 25 Python
python pytest进阶之xunit fixture详解
Jun 27 Python
使用Filter过滤python中的日志输出的实现方法
Jul 17 Python
Python post请求实现代码实例
Feb 28 Python
paramiko使用tail实时获取服务器的日志输出详解
Dec 06 Python
Pandas 稀疏数据结构的实现
Jul 25 Python
python的列表生成式,生成器和generator对象你了解吗
Mar 16 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判断是否有Get参数的方法
2014/05/05 PHP
php从memcache读取数据再批量写入mysql的方法
2014/12/29 PHP
Symfony2使用Doctrine进行数据库查询方法实例总结
2016/03/18 PHP
php短信接口代码
2016/05/13 PHP
浅谈Coreseek、Sphinx-for-chinaese、Sphinx+Scws的区别
2016/12/15 PHP
给大家分享几个常用的PHP函数
2017/01/15 PHP
ThinkPHP框架整合微信支付之刷卡模式图文详解
2019/04/10 PHP
jquery eval解析JSON中的注意点介绍
2013/08/23 Javascript
php跨域调用json的例子
2013/11/13 Javascript
利用javaScript实现点击输入框弹出窗体选择信息
2013/12/11 Javascript
jQuery中用dom操作替代正则表达式
2014/12/29 Javascript
Javascript实现获取及设置光标位置的方法
2015/07/21 Javascript
分享JavaScript与Java中MD5使用两个例子
2015/12/23 Javascript
JavaScript中通过提示框跳转页面的方法
2016/02/14 Javascript
Angularjs实现带查找筛选功能的select下拉框示例代码
2016/10/04 Javascript
浅谈JavaScript作用域和闭包
2017/09/18 Javascript
vue2.0 better-scroll 实现移动端滑动的示例代码
2018/01/25 Javascript
JavaScript引用类型RegExp基本用法详解
2018/08/09 Javascript
Windows下支持自动更新的Electron应用脚手架的方法
2018/12/24 Javascript
使用layui前端框架弹出form表单以及提交的示例
2019/10/25 Javascript
js实现淘宝浏览商品放大镜功能
2020/10/28 Javascript
python基础教程之基本数据类型和变量声明介绍
2014/08/29 Python
在Python程序中实现分布式进程的教程
2015/04/28 Python
python中字符串类型json操作的注意事项
2017/05/02 Python
python用quad、dblquad实现一维二维积分的实例详解
2019/11/20 Python
Meli Melo官网:名媛们钟爱的英国奢侈手包品牌
2017/04/17 全球购物
俄罗斯天然和有机产品、健康生活网上商店:Fitomarket.ru
2020/10/09 全球购物
Linux如何修改文件和文件夹的权限
2012/06/27 面试题
JSP和Servlet有哪些相同点和不同点,他们之间的联系是什么?
2015/10/22 面试题
大学校园毕业自我鉴定
2014/01/15 职场文书
关于环保的建议书
2014/05/12 职场文书
三八红旗手先进事迹材料
2014/05/13 职场文书
装修活动策划方案
2014/08/27 职场文书
中秋节国旗下演讲稿
2014/09/13 职场文书
如何写观后感
2015/06/19 职场文书
导游词之太原天龙山
2020/01/02 职场文书