当前位置: 首页 > 面试题库 >

Flask-将对象直接存储在会话中

卫君博
2023-03-14
问题内容

我想知道是否有可能直接在Flask会话中存储对象,而无需重写序列化程序。为了使此功能正常工作,我需要在课堂上实现任何功能吗?下面的示例代码。这就是我想要的样子。但是,当您尝试执行该操作时,它会抛出错误信息TypeError: Object of type ‘Test’ is not JSON serializable

任何帮助是极大的赞赏!提前致谢!:)

import flask
from flask import Flask, session, redirect

class Test:
    def __init__(self, x, y, z):
    self.x = x
    self.y = y
    self.z = z

app = Flask(__name__)
app.secret_key = 'xyz'

@app.route('/')
def main():
    session['my_object'] = Test(1, 2, 3)
    return redirect('retrieve')

@app.route('/retrieve')
def return_my_object():
    my_object = session.get('my_object')
    return str(my_object)

if __name__ == '__main__':
    app.run(debug=True)

问题答案:

使对象序列化并实现所需功能的一种简单方法是__dict__像这样使用:

def main():
    session['my_object'] = Test(1, 2, 3).__dict__
    return redirect('retrieve')


 类似资料:
  • 问题内容: 我想用Spring来实现一个购物车,所以我需要在会话中保存一个对象(该对象具有product,paymentType和deliveryType之类的属性)。我尝试使用bean并将属性“ scope”设置为“ session”来创建它,但是它不起作用,我应该在控制器或类中使用一些其他注释吗?任何示例用法都将非常有帮助:-)预先感谢。 问题答案: 然后 如果它在Web上下文(dispatc

  • 问题内容: 我正在编写一个小的Flask应用程序,并使用将其连接到。我希望每个会话都可以启动,然后维护自己的连接。 像这样: 不起作用,因为连接对象不可JSON序列化。另一方面,是这样的: 不起作用,因为它在请求之间不会持久存在。更麻烦的是,似乎并没有为连接提供任何标识符,因此我无法在会话中存储连接ID,并无法在每次请求之前使用该ID检索正确的连接。 有没有办法完成每个会话的唯一连接? 问题答案:

  • 问题内容: 我在开发中使用带有护照的节点/表达式。我碰到一篇文章说: Express加载会话数据并将其附加到请求。当护照在会话中存储序列化的用户时,可以在req.session.passport.user中找到序列化的用户对象。 但是令我惊讶的是,浏览器cookie中的sessionID存储的值在登录前后都保持不变。那么,序列化的用户对象存储在哪里? 我以为它最初存储在用户cookie中,但似乎不

  • sessionStorage 会话存储 存储针对QQ帐号隔离 数据存储于内存中,当前游戏结束后被清空 函数 key( index ) 获取对应索引的key 手q 版本7.8.5 参数 参数名 类型 说明 index number 索引值 返回值 类型 说明 string 说明 示例 var stringKey = BK.sessionStorage.key(0); getItem( key )

  • 问题内容: 我正在尝试使用hibernate模式写入多个数据库。我已经将写和读/写会话封装在单个会话对象中。但是,当我去保存时,出现很多错误,这些对象已与另一个会话关联:“非法尝试将一个集合与两个打开的会话关联” 这是我的代码: 我试图逐出该物体并冲洗;但是,这会导致“行被另一个事务更新或删除”问题,即使两个会话都指向不同的数据库。 除了上述内容,我还尝试使用hibernate的复制功能。没有错误

  • 问题内容: 这就是事情- 我想在特定键下的redis中存储本机JS(node.js)对象(闪存套接字引用)。当我简单地做到这一点时,它存储为一个字符串。当我尝试获得价值时,我得到的只是一个字符串。 有机会工作吗?这是我的代码: 问题答案: 下载者:这里的上下文是SET命令,可以存储任意对象。 不,你不能那样做。您应该接受以下事实:Redis将所有内容存储为字符串(毕竟,协议是基于文本的)。Redi