Flask-Session

因为flask自带的session是将session存在cookie中;

所以才有了第三方Flask_session插件,可以将session存储在我们想存储的数据库中(redis等)

pip install Flask-Session

将session保存在数据库中

注意redis数据库一定是在内网中的且是一台单独的服务器,防止被攻击

from flask import Flask,session,request,render_template
from flask_session import Session # 导入第三方插件
import redis # 导入redis模块,操作redis数据库的模块
app = Flask(__name__) # 指定什么数据库
app.config["SESSION_TYPE"] = "redis"
# 指定数据库的ip端口用哪个仓库存储及数据库密码,db表示redis的仓库[0-15]通过select切换,用做数据隔离
app.config["SESSION_REDIS"] = redis.Redis(host="192.168.16.16",port=6380,db=6,password="123") # 设置session过期时间,默认31天,
# app.config["PERMANENT_SESSION_LIFETIME"] = 20 # 20秒过期
# 替换Flask原有的session机制,原来session是保存在前端的cookie中的,现在我们指定session存储在数据库中
Session(app) @app.route("/login",methods=["POST","GET"])
def login():
if request.method=="GET":
return render_template("login.html")
else:
# 设置session,保存在redis数据库中,注意设置session用的是redis自带的session模块
session["username"] = 2222
# 直接从redis数据库中查看session值
uname = session.get("username") # return "200 OK" if __name__ == '__main__':
app.run("0.0.0.0",9527)

其他session设置

# app.config['SESSION_PERMANENT'] = False  # 如果设置为True,则关闭浏览器session就失效。
# app.config['SESSION_USE_SIGNER'] = False # 是否对发送到浏览器上session的cookie值进行加密
# app.config['SESSION_KEY_PREFIX'] = 'session:' # 保存到session中的值的前缀
# session的类型
config.setdefault('SESSION_TYPE', 'null')
# 在设置了session.permanent =True 后,它也会被保存在cookie中,
# key 是 _permanent,如果不清除这个cookie,即使你在以后没有设置为True,
# session也会被从cookie 中的值设置为True的
config.setdefault('SESSION_PERMANENT', True)
# 是否对发送到浏览器上 session:cookie值进行加密
config.setdefault('SESSION_USE_SIGNER', False)
# 保存到session中的值的前缀
config.setdefault('SESSION_KEY_PREFIX', 'session:')
# 文件路径
config.setdefault('SESSION_FILE_DIR',
os.path.join(os.getcwd(), 'flask_session'))
# 存储session的个数如果大于这个值时,就要开始进行删除了
config.setdefault('SESSION_FILE_THRESHOLD', 500)
# 文件权限类型
config.setdefault('SESSION_FILE_MODE', 384)

redis中的仓库,用来数据隔离

通过前端的session Key查询保存在数据库中的session

import redis,pickle

r = redis.Redis(host="192.168.16.16",port=6380,db=6,password="")

a = r.get("session:22d30ca0-323e-4244-b8de-831c8f964bc1")
# 查询出来的值是序列化后的,我们需要进行反序列化查看原始的值
print(pickle.loads(a)) # {'_permanent': True, 'username': 2222}

蓝图中的CBV模式设置session

蓝图

from flask import Blueprint,render_template,request,session
from flask import views
user = Blueprint("user",__name__) # 参数user表示蓝图唯一标识不能重复,实例化一个蓝图(Blueprint)对象 class User(views.MethodView):
def get(self):
return render_template("login.html") def post(self):
username = request.form.get("username")
password = request.form.get("password")
if username == "henry" and password == "":
# 设置session
session["username"] = "henry"
uname = session.get("username")
print(uname)
return "200 ok"
else:
return "" user.add_url_rule("/login",view_func=User.as_view(name="login"))

程序启动入口

from flask import Flask
from use.uses import uses # 导入蓝图实例
from redis import Redis
from flask_session import Session # 导入session第三方插件
app = Flask(__name__) # 指定什么数据库
app.config["SESSION_TYPE"] = "redis"
# 指定数据库的ip端口用哪个仓库存储及数据库密码,redis的仓库[0-15]通过select切换
app.config["SESSION_REDIS"] = Redis(host="192.168.16.16",port=6380,db=6,password="")
Session(app) # 注册蓝图
app.register_blueprint(uses)
if __name__ == '__main__':
app.run('127.0.0.1',9000)

redis存储如下:

Flask-第三方插件的更多相关文章

  1. flask第三方插件WTForms

    在django中有ModelForm, 虽然flask原生没有提供, 但是强大的第三方也提供了这样的功能 虽然不如django的强大, 但是基本的功能还是可以有的, 下面就来使用一哈. WTForms ...

  2. flask第三方插件DBUtils

    django中有强大的ORM支持我们来操作数据库, 但是flask没有提供对数据库的操作, 依然还是需要第三方的支持, 来提高我们的开发效率. 下载DBUtils 使用DBUtils 使用DBUtil ...

  3. Flask框架 (四)—— 请求上下文源码分析、g对象、第三方插件(flask_session、flask_script、wtforms)、信号

    Flask框架 (四)—— 请求上下文源码分析.g对象.第三方插件(flask_session.flask_script.wtforms).信号 目录 请求上下文源码分析.g对象.第三方插件(flas ...

  4. 4.flask第三方组件

    1.flask-session的使用 在flask中,有一个app.session_interface = SecureCookieSessionInterface(),也就是存session,调用o ...

  5. zabbix通过第三方插件percona监控mysql数据库

     zabbix通过第三方插件percona监控mysql数据库                                                                     ...

  6. iOS 开发:利用第三方插件来安装CoCoapods

    引言:通过上一篇博客我们知道了怎么样去通过终端来安装CoCoapods,这一篇我们着重与用第三方插件来安装CoCoapods: 1. 首先在提下链接下载插件 https://github.com/ka ...

  7. 苹果下如果安装nginx,给nginx安装markdown第三方插件

    用brew install nginx 这样安装的是最新版的nginx, 但是在有些情况下,安装第三方插件需要特定的版本,更高一级的版本可能装不上. 它的原理是下载安装包进行自动安装,建立软链,这样就 ...

  8. ThinkPHP自动获取关键词(调用第三方插件)

    ThinkPHP自动获取关键词调用在线discuz词库 先按照下图路径放好插件 方法如下 /** * 自动获取关键词(调用第三方插件) * @return [type] [description] * ...

  9. iOS 学习笔记 十 (2015.04.03)xcode第三方插件

    1.xcode第三方插件,存放路径:~/Library/Application Support/Developer/Shared/Xcode/Plug-ins

  10. zatree第三方插件

    Zabbix安装第三方插件zatree2.4.5 1.下载zatree第三方插件https://github.com/spide4k/zatree.git 2.检查PHP环境需要支持php-xml.p ...

随机推荐

  1. 获取类的描述信息 DescriptionAttribute

    static void Main(string[] args) { var attrs = typeof(TestClass).GetCustomAttributes(typeof(System.Co ...

  2. R语言做逻辑回归

    前面写过一个多分类的逻辑回归,现在要做一个简单的二分类,用glm函数 导入csv格式如下: mydata<-read.csv("D://li.csv",header=T) c ...

  3. 使用swagger在netcorewebapi项目中自动生成文档

    一.背景 随着前后端分离模式大行其道,我们需要将后端接口撰写成文档提供给前端,前端可以查看我们的接口,并测试,提高我们的开发效率,减少无效的沟通.在此情况下,通过代码自动生成文档,这种需求应运而生,s ...

  4. .NET Core 常用第三方包

    .NET Core 常用第三方包 作者:高堂 原文地址:https://www.cnblogs.com/gaotang/p/10845370.html 写在前面 最近在学习.NET Core 中经常用 ...

  5. 使用zrender.js绘制体温单(1)

    之前公司请外包做了一个体温单使用的zrender.js 但是代码比较复杂维护性比较低再加上自己技术也不行 最近闲下来的时候看了一下zrender的官网慢慢的摸索并读了下之前的代码,感觉实际并不难,就自 ...

  6. background 背景图片 --css3

    background 1.设置背景平铺background-repeat round :图片会进行缩放后平铺space : 图片会进行平铺,中间留下空白空间 注:当滚动行为设为fixed,round和 ...

  7. Linux报错排解

    1.Loaded plugins: product-id, search-disabled-repos, subscription-manager This system is not registe ...

  8. storm连接http需要的jar包

    将httpclient-4.5.6.jar  httpcore-4.4.10.jar这两个jar包拷贝到storm安装目录下的lib目录下 如果是集群的话,需要拷贝到集群中的每台机器上

  9. 安卓已过时的ProgressDialog对话框

    private ProgressDialog mDialog; private Handler mHandler; //初始化Handler //初始化 mDialog = new ProgressD ...

  10. python 制作影视动画、电影特效工具

    一直觉得电影特效,动画制作这些都很什么,在google上搜索了下python开发电影特效的内容,发现了几个不错的软件,都支持python脚本开发. Houdini  Houdini (电影特效魔术师) ...