• 【Flask】第三方插件


    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
    # app.config['SESSION_PERMANENT'] = False  # 如果设置为True,则关闭浏览器session就失效。
    # app.config['SESSION_USE_SIGNER'] = False  # 是否对发送到浏览器上session的cookie值进行加密
    # app.config['SESSION_KEY_PREFIX'] = 'session:'  # 保存到session中的值的前缀
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    # 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="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存储如下:

  • 相关阅读:
    在servlet中实现页面跳转
    我的jsp学习日记——001:@include(静态包含指令)和jsp:include(动态包含指令)的区别
    myEclipse中修改新建jsp文档的编码格式
    js判断一个图片是否已经存在于缓存中
    MyEclipse的JavaScript提示插件(JSEclipse)
    pku2051 Argus
    pku2084 Game of Connections
    pku2001 Shortest Prefixes
    pku2007 Scrambled Polygon
    pku2153 Rank List
  • 原文地址:https://www.cnblogs.com/youxiu123/p/11624299.html
Copyright © 2020-2023  润新知