Flask之Flask_Session插件
Posted qq631243523
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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())
以上是关于Flask之Flask_Session插件的主要内容,如果未能解决你的问题,请参考以下文章