python-3.x - 如何使用 SQLAlchemy 配置 Flask-Session 以在服务器端存储 Flask 会话
问题描述
我正在开发一个部署在 heroku 上的 Flask 应用程序。
该应用程序使用Flask-Session我需要帮助才能正确配置服务器端会话存储。
我首先将其配置为使用 Flask-Session configuration = "SESSION_FILE_DIR" = mkdtemp() 在服务器端存储会话。但是,在这种情况下,Heroku 不能以这种方式正常运行。Heroku 不会存储会话,用户只会随机注销。我已经看到将会话存储在数据库中而不是服务器临时文件夹中的建议。
我尝试使用“SESSION_TYPE”=“sqlalchemy”将会话转移到数据库存储。我还不能正确运行它以在 locahost 上运行。
按照这个如何在 Postgres 数据库中保存会话?也是,但没有成功...
"""application.py"""
import os, datetime
from tempfile import mkdtemp
from werkzeug.exceptions import default_exceptions, HTTPException, InternalServerError
from werkzeug.security import check_password_hash, generate_password_hash
from flask import Flask, flash, jsonify, redirect, render_template, request, session
from flask_session import Session
# Import my package modules
from helpers import apology, login_required, status_mapper
from class_h import *
# Configure application
app = Flask(__name__)
# Ensure responses aren't cached
@app.after_request
def after_request(response):
response.headers["Cache-Control"] = "no-cache, no-store, must-revalidate"
response.headers["Expires"] = 0
response.headers["Pragma"] = "no-cache"
return response
原始会话配置 ->
# # Configure session to use filesystem (instead of signed cookies)
# app.config["SESSION_FILE_DIR"] = mkdtemp()
# app.config["SESSION_PERMANENT"] = False
# app.config["SESSION_TYPE"] = "filesystem"
# Session(app)
我在主文件中导入的 class_h.py 模型文件,创建 db 实例,在 application.py 中初始化
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
# create a db but using flask_sqlalchemy syntax
db = SQLAlchemy()
Flask-SQLAlchemy 配置,Heroku Postgres 数据库
app.config["SQLALCHEMY_DATABASE_URI"] = os.getenv("DATABASE_URL")
app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = False
db.init_app(app)
配置 flask_session 以使用 SQLAlchemy(而不是签名的 cookie)
app.config["SESSION_PERMANENT"] = False
app.config["SESSION_TYPE"] = "sqlalchemy"
Session(app)
在我对 session.py 文件应用 [此修复] ( https://github.com/mnbf9rca/flask-session/commit/9ad4b23e946beba1fdbd23dc406058a77dac6676 ) 后,会话记录不会在数据库中创建。如果未应用修复,则使用 None 值创建会话。
试过
from flask_sessionstore import Session
但我得到相同的行为。
尝试过:
["SESSION_PERMANENT"] = True
使用 Null 到期创建会话(而不是未创建)。
感谢您的帮助!花了几天时间研究这个。
解决方案
推荐阅读
- php - 使用 ezSQL v4 PDO 对 WHERE 条件进行分组
- java - 如何在没有字符集功能的 zip4j 中设置字符集 utf-8?
- php - 提交后如何防止页面刷新到首页
- reactjs - 如何使用 reactstrap 创建轮播并从道具中获取数据?
- java - DynamoDb:使用 findAllById(ids) 访问数据是一个例外
- mysql - 将数据从 Perl 插入到 MySQL
- python - 如何更改文件夹中的所有文件名?
- javascript - 在 ChartJS 时间序列中显示没有数据的时间戳之间的差距
- flutter - Flutter Colors 我想获取颜色的字符串值
- python-3.x - 为什么 python 脚本无法在 AWS ec2 中运行?