目录
简介
存储方式
- Redis
- Memcached
- filesystem
- MongoDB
- sqlalchemy
简介
flask-session 是 flask 框架的 session 组件, 由于原来 flask 内置 session 使用签名 cookie 保存, 该组件则将支持 session 保存到多个地方, 如:
- Redis
- Memcached
- filesystem
- MongoDB
- sqlalchmey
安装
pip3 install flask-session
存储方式
Redis
第一种
- 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()
第二种
- from flask import Flask,session
- from flask_session import RedisSessionInterface
- import Redis
- App = Flask(__name__)
- conn=Redis.Redis(host='127.0.0.1',port=6379)
- #use_signer 是否对 key 签名
- # 如果 use_siginer 为 False, 这表示不需要配置 App.secret_key
- App.secret_key="aksdhkajs"
- App.session_interface=RedisSessionInterface(conn,key_prefix='hades',
- use_signer=True,permanent=False)
- '''
- 之前的 session
- seesion 名字为配置文件中的名字
- 存: seesion -> 加密 -->cookie
- 取: session --> 值 ----》解密
- redis 的 seesion
- seesion 名字为配置文件中的名字
- name=self.key_prefix + session.sid, value=val 是 redis 里面的键
- val 存到 redis
- seesion -->name
- name 加前缀 --->redis 取
- '''@App.route('/')
- def hello_world():
- session['name']='hades'
- return 'Hello World!'
- @App.route("/index")
- def index():
- print(session['name'])
- return "ok"
- if __name__ == '__main__':
- App.run()
- Memcached
- #!/usr/bin/env python
- # -*- coding:utf-8 -
- 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 类型为 Memcached
- 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 -
- 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 类型为 filesystem
- App.config[
- 'SESSION_FILE_DIR'] = '/Users/wupeiqi/PycharmProjects/grocery/96.Flask 新课程 / 组件 / 2.flask-session' # 文件路径
- 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
- return 'xx'
- if __name__ == '__main__':
- App.run()
- MongoDB
- #!/usr/bin/env python
- # -*- coding:utf-8 -
- 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 类型为 MongoDB
- 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:[email protected]: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()
- >>>
3 人点赞
flask
来源: http://www.bubuko.com/infodetail-3269687.html