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") # 2222 return "200 OK" if __name__ == ‘__main__‘: app.run("0.0.0.0",9527)
其他session设置
1 2 3 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
|
redis中的仓库,用来数据隔离
通过前端的session Key查询保存在数据库中的session
import redis,pickle r = redis.Redis(host="192.168.16.16",port=6380,db=6,password="123") 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 == "123456": # 设置session session["username"] = "henry" uname = session.get("username") print(uname) return "200 ok" else: return "404" 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="123") Session(app) # 注册蓝图 app.register_blueprint(uses) if __name__ == ‘__main__‘: app.run(‘127.0.0.1‘,9000)
redis存储如下:
原文地址:https://www.cnblogs.com/youxiu123/p/11624299.html