我正在 Heroku 上部署一个 Flask 应用程序,出于各种原因需要实现服务器端 session ,但我不知道如何正确设置它。 Heroku 的 docs关于如何连接非常简单:
import os
import redis
r = redis.from_url(os.environ.get("REDIS_URL"))
我正在尝试使用 Flask-Session extension 运行它.根据他们的快速入门示例:
from flask import Flask, session
from flask.ext.session import Session
app = Flask(__name__)
# Check Configuration section for more details
SESSION_TYPE = 'redis'
app.config.from_object(__name__)
Session(app)
@app.route('/set/')
def set():
session['key'] = 'value'
return 'ok'
我对两者的连接方式感到困惑,因为在后一个示例中甚至没有导入 redis 模块。在 Flask-session 页面上进一步阅读,有一个表格“扩展也理解的配置键列表:”,其中一个是“SESSION_REDIS”,描述为“A redis.Redis例如,默认连接到 127.0.0.1:6379”。我猜这是 Heroku 文档中的实例 (r),但是短语“扩展程序理解的键”让我不知道如何实际处理它。
最佳答案
是的,Flask-session 的文档非常糟糕。 扩展程序理解的 key 意味着您可以指定列出的配置选项,将它们传递给您的 Flask 应用程序,Flask session 将确认并使用这些选项。之所以称为键,是因为 Flask 应用程序接受键值字典形式的配置。
在 Flask-session 中,他们使用非常不寻常的方法来配置它:他们要求您传递已配置的 redis 客户端对象,而不是将主机、端口等选项作为字符串传递:
from flask import Flask, session
from flask_session import Session
from redis import Redis
app = Flask(__name__)
SESSION_TYPE = 'redis'
SESSION_REDIS = Redis(host="your_host", port=1234)
app.config.from_object(__name__)
Session(app)
关于heroku - 在 Heroku 上使用 Redis 的服务器端 Flask session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53095702/