zoukankan      html  css  js  c++  java
  • flask-session

    允许设置session到指定存储的空间中, 文档:

    安装命令: https://pythonhosted.org/Flask-Session/

    pip install flask-session

    使用session之前,必须配置一下配置项:

    SECRET_KEY = "*(%#4sxcz(^(#$#8423" # session秘钥


    SQLAlchemy存储session的基本配置

    需要手动创建session表,在项目第一次启动的时候,使用db.create_all()来完成创建。

    from flask import Flask
    from flask_sqlalchemy import SQLAlchemy
    from flask_session import Session
    app = Flask(__name__)
    db = SQLAlchemy()
    session_store = Session(app)
    ​
    class Config(object):
        DEBUG = True
        SECRET_KEY = "*(%#4sxcz(^(#$#8423"  # session秘钥
        # 数据库连接配置
        # SQLALCHEMY_DATABASE_URI = "数据库类型://数据库账号:密码@数据库地址:端口/数据库名称?charset=utf8mb4"
        SQLALCHEMY_DATABASE_URI = "mysql://root:123@127.0.0.1:3306/students?charset=utf8mb4"
        # 动态追踪修改设置,如未设置只会提示警告
        SQLALCHEMY_TRACK_MODIFICATIONS = True
        # 查询时会显示原始SQL语句
        SQLALCHEMY_ECHO = False
        # 把session通过SQLAlchmey保存到mysql中
        SESSION_TYPE = "sqlalchemy" # session类型为sqlalchemy
        SESSION_SQLALCHEMY = db     # SQLAlchemy对象
        SESSION_SQLALCHEMY_TABLE = 'db_session' # session要保存的表名称
        SESSION_PERMANENT = True    # 如果设置为True,则关闭浏览器session就失效
        SESSION_USE_SIGNER =  False  # 是否对发送到浏览器上session的cookie值进行加密
        SESSION_KEY_PREFIX = "session:" # sessionID的前缀,默认就是 session:
    ​
    app.config.from_object(Config)
    db.init_app(app)
    session_store.init_app(app)
    ​
    from flask import session
    @app.route("/set")
    def set_session():
        session["uname"] = "xiaoming"
        session["age"]   = 18
        return "ok"
    ​
    @app.route("/get")
    def get_session():
        print(session.get("uname"))
        print(session.get("age"))
        return "ok"
    ​
    @app.route("/del")
    def del_session():
    ​
        print(session.pop("uname"))
        print(session.pop("age"))
        return "ok"
    ​
    if __name__ == '__main__':
        with app.app_context():
            db.create_all()
        app.run()
    

    redis保存session的基本配置

    这个功能必须确保,服务器必须已经安装了redis而且当前项目虚拟环境中已经安装了redis扩展库

    pip install flask-redis -i https://pypi.douban.com/simple

    # flask-redis是第三方开发者为了方便我们在flask框架中集成redis数据库操作所封装一个redis操作库、
    # 在flask中要基于flask-redis进行数据库则可以完成以下3个步骤即可:
    # 1. 引入flaskRedis并实例化
    from flask.ext.redis import FlaskRedis
    redis = FlaskRedis()
    redis.init(app)
    # 2. 在config配置中使用 REDIS_URL配置redis的url地址
    REDIS_URL = "redis://:password@localhost:6379/0"
    ​
    # 3. 使用实例化后的flaskRedis对象即可操作redis数据库,这个库就是我们之前在django中操作redis时使用库
    # 直接通过 redis对象.命令方法(参数1, 参数2...)
    redis.setex("sms",5 * 60 , "10010")
    

    在redis中保存session,代码:

    from flask import Flask
    from flask_sqlalchemy import SQLAlchemy
    from flask_session import Session
    app = Flask(__name__)
    db = SQLAlchemy()
    session_store = Session(app)
    ​
    from flask_redis import FlaskRedis
    redis_session = FlaskRedis()
    class Config(object):
        DEBUG = True
        SECRET_KEY = "*(%#4sxcz(^(#$#8423"  # session秘钥
        SQLALCHEMY_DATABASE_URI = "mysql://root:123@127.0.0.1:3306/students?charset=utf8mb4"
        SQLALCHEMY_TRACK_MODIFICATIONS = False
        SQLALCHEMY_ECHO = False
        # redis连接地址  redis://用户名:密码@IP地址:端口/数据库名
        REDIS_URL = "redis://:@127.0.0.1:6379/15"
        # 把session保存到redis
        SESSION_TYPE = "redis"     # session存储方式为redis
        SESSION_PERMANENT = False  # 如果设置session的生命周期是否是会话期, 为True,则关闭浏览器session就失效
        SESSION_USE_SIGNER = False # 是否对发送到浏览器上session的cookie值进行加密
        SESSION_KEY_PREFIX = "session:" # 保存到redis的session数的名称前缀
        # session保存数据到redis时启用的链接对象
        SESSION_REDIS = redis_session # 用于连接redis的配置
    ​
    app.config.from_object(Config)
    db.init_app(app)
    session_store.init_app(app)
    redis_session.init_app(app)
    ​
    ​
    from flask import session
    @app.route("/set")
    def set_session():
        session["uname"] = "xiaoming"
        session["age"]   = 18
        return "ok"
    ​
    @app.route("/get")
    def get_session():
        print(session.get("uname"))
        print(session.get("age"))
        return "ok"
    ​
    @app.route("/del")
    def del_session():
    ​
        print(session.pop("uname"))
        print(session.pop("age"))
        return "ok"
    ​
    if __name__ == '__main__':
        with app.app_context():
            db.create_all()
        app.run()
    
  • 相关阅读:
    Eclipse EE 3.6 failed to create the java virtual machine 解决
    [收藏]家用三线插座(220V单相)正确接线方法
    Java设计模式 Design Pattern:包装模式 Decorator Pattern
    MIME 类型列表
    面试题参考
    循环队列的运用求K阶斐波那契序列
    加密技术仿射密码
    面试题集锦_1
    栈的运用(5)转换逆波兰式
    栈的运用(6)逆波兰式求值
  • 原文地址:https://www.cnblogs.com/hsqKTm/p/14821587.html
Copyright © 2011-2022 走看看