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实现线程池代码分享
Jun 21 Python
Django使用HttpResponse返回图片并显示的方法
May 22 Python
pycharm debug功能实现跳到循环末尾的方法
Nov 29 Python
Python基础教程之异常详解
Jan 10 Python
django中ORM模型常用的字段的使用方法
Mar 05 Python
Python之数据序列化(json、pickle、shelve)详解
Aug 30 Python
django formset实现数据表的批量操作的示例代码
Dec 06 Python
开启Django博客的RSS功能的实现方法
Feb 17 Python
如何基于Python代码实现高精度免费OCR工具
Jun 18 Python
python 如何将office文件转换为PDF
Sep 22 Python
Python之qq自动发消息的示例代码
Feb 18 Python
如何在Python中创建二叉树
Mar 30 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
解决ajax+php中文乱码的方法详解
2013/06/09 PHP
关于Ext中form移除textfield方法:hide(),setVisible(false),remove()
2010/12/02 Javascript
$.format,jquery.format 使用说明
2011/07/13 Javascript
用js判断页面刷新或关闭的方法(onbeforeunload与onunload事件)
2012/06/22 Javascript
JSONP 跨域共享信息
2012/08/16 Javascript
jQuery.prototype.init选择器构造函数源码思路分析
2013/02/05 Javascript
Javascript new Date().valueOf()的作用与时间戳由来详解
2013/04/24 Javascript
jquery处理json对象
2014/11/03 Javascript
js实现格式化金额,字符,时间的方法
2015/02/26 Javascript
JavaScript动态改变表格单元格内容的方法
2015/03/30 Javascript
JavaScript常用字符串与数组扩展函数小结
2016/04/24 Javascript
12个非常实用的JavaScript小技巧【推荐】
2016/05/18 Javascript
JavaScript判断数字是否为质数的方法汇总
2016/06/02 Javascript
AngularJS中关于ng-class指令的几种实现方式详解
2016/09/17 Javascript
javascript实现非常简单的小数取整功能示例
2017/06/13 Javascript
详解webpack 多入口配置
2017/06/16 Javascript
详解基于Node.js的微信JS-SDK后端接口实现代码
2017/07/15 Javascript
NodeJs form-data格式传输文件的方法
2017/12/13 NodeJs
Angular ng-animate和ng-cookies用法详解
2018/04/18 Javascript
Node.js进阶之核心模块https入门
2018/05/23 Javascript
vuejs前后端数据交互之从后端请求数据的实例
2018/08/11 Javascript
浅析vue-router原理
2018/10/19 Javascript
js实现ATM机存取款功能
2020/10/27 Javascript
Python生成随机MAC地址
2015/03/10 Python
Python发送以整个文件夹的内容为附件的邮件的教程
2015/05/06 Python
tensorflow识别自己手写数字
2018/03/14 Python
基于python 爬虫爬到含空格的url的处理方法
2018/05/11 Python
Django使用详解:ORM 的反向查找(related_name)
2018/05/30 Python
python3+requests接口自动化session操作方法
2018/10/13 Python
python实现横向拼接图片
2020/03/23 Python
团队经理竞聘书
2014/03/31 职场文书
一年级学生评语大全
2014/04/21 职场文书
中华美德颂演讲稿
2014/05/20 职场文书
学校2014年度工作总结
2014/12/06 职场文书
辩护意见书
2015/06/04 职场文书
工作表现证明
2015/06/15 职场文书