Flask_Session插件

Posted glh-ty

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Flask_Session插件相关的知识,希望对你有一定的参考价值。

一,介绍

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

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

二,使用

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())

 

以上是关于Flask_Session插件的主要内容,如果未能解决你的问题,请参考以下文章

flask_session

VIM 代码片段插件 ultisnips 使用教程

flask flask_session,WTForms

WordPress - 代码片段插件

Flask快速入门(17) — flask_session

VSCode插件开发全攻略代码片段设置自定义欢迎页