• Flask之Flask_Session插件


    一,Flask_Session介绍

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

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

    二,使用

    首先需要安装一下Flask_session

    pip install Flask-Session
    from flask import Flask, request, render_template, redirect, session
    from flask_session import Session
    import redis
    
    app = Flask(__name__)
    # app.secret_key = "123"
    app.config["SESSION_TYPE"] = "redis"
    app.config["SESSION_REDIS"] = redis.Redis(host="localhost", port=6379, db=3)
    Session(app)
    
    @app.route("/login", methods=("GET", "POST"))
    def login():
        msg = ""
        if request.method == "POST":
            print(request.form)
            print(request.form.get("hhh"))
            username = request.form.get("username")
            pwd = request.form.get("pwd")
            if username == "ggg" and pwd == "123":
                session["user"] = username
                return redirect("/home")
            msg = "用户名或者密码错误"
        return render_template("login.html", msg=msg)

    以上为我们使用Redis数据库存session的配置,我们具体使用session的方式还是和flask中自带的session一样。

    三,源码

        def _get_interface(self, app):
            config = app.config.copy()
            config.setdefault('SESSION_TYPE', 'null')
            config.setdefault('SESSION_PERMANENT', True)
            config.setdefault('SESSION_USE_SIGNER', False)
            config.setdefault('SESSION_KEY_PREFIX', 'session:')
            config.setdefault('SESSION_REDIS', None)
            config.setdefault('SESSION_MEMCACHED', None)
            config.setdefault('SESSION_FILE_DIR',
                              os.path.join(os.getcwd(), 'flask_session'))
            config.setdefault('SESSION_FILE_THRESHOLD', 500)
            config.setdefault('SESSION_FILE_MODE', 384)
            config.setdefault('SESSION_MONGODB', None)
            config.setdefault('SESSION_MONGODB_DB', 'flask_session')
            config.setdefault('SESSION_MONGODB_COLLECT', 'sessions')
            config.setdefault('SESSION_SQLALCHEMY', None)
            config.setdefault('SESSION_SQLALCHEMY_TABLE', 'sessions')
    
            if config['SESSION_TYPE'] == 'redis':
                session_interface = RedisSessionInterface(
                    config['SESSION_REDIS'], config['SESSION_KEY_PREFIX'],
                    config['SESSION_USE_SIGNER'], config['SESSION_PERMANENT'])
            .......
    class RedisSessionInterface(SessionInterface):
        def __init__(self, redis, key_prefix, use_signer=False, permanent=True):...
            ...
    
        def open_session(self, app, request): ...
    
        def save_session(self, app, session, response):...
    
    
    # 通过重写这两个方法,实现

    源码中表示我们可以这样在redis中查看存储的session

    get  session:+ 随机字符串(uuid.uuid4())

  • 相关阅读:
    iOS.访问通讯录.01.读取联系人信息
    iOS.定位服务与地图应用.07.调用谷歌Web地图
    iOS.定位服务与地图应用.06.调用iOS苹果地图
    iOS.定位服务与地图应用.05.跟踪用户位置变化
    iOS.定位服务与地图应用.04.使用iOS苹果地图
    iOS.定位服务与地图应用.03.地理信息编码查询
    iOS.定位服务与地图应用.02.地理信息反编码
    Java中的基本数据类型在内存所占字节
    APK文件反编译
    基于Android系统开发的简易音乐播放器
  • 原文地址:https://www.cnblogs.com/qq631243523/p/10268845.html
Copyright © 2020-2023  润新知