我正在编写一个Web应用程序,当用户登录时(并且仅当用户登录时)从第三方服务器接收大量数据。此数据被解析为自定义对象并存储在list()
中。现在,用户在应用程序周围处理这些数据,调用不同的视图(例如发送不同的请求)。
我不确定在视图函数之间传递对象列表的最佳模式是什么?
我在技术上看到了两种可能性,但在我的情况下两者都有缺点:
我不是一个非常有经验的网络开发人员,所以也许我会监督这个显而易见的事情。 那么还有另一种方法在请求之间传递数据吗?也许一些内置烧瓶魔术或持久(到文件或数据库)真的是唯一的选择?
答案 0 :(得分:5)
您可以使用Flask-Cache (flask.ext.cache
)的SimpleCache
(真正werkzeug.contrib.cache.SimpleCache
)将数据存储在应用程序的内存中。唯一的问题是每个服务器进程都有一个缓存实例(如果你是uwsgi的后面,或者在mod_wsgi上运行,你很可能会有多个进程处理请求)。因此,用户可以命中应用程序的一个端点,为获取数据付出代价,然后在下一个请求中,点击另一个进程并再次支付该成本(因为进程A具有缓存的数据) ,流程B没有)。
解决这个问题的唯一方法是使用进程外存储(父进程上的缓存或充当缓存服务器的单独Python进程或某些持久性存储[Redis,PostGres等]。 ])
答案 1 :(得分:5)
虽然Flask的会话默认实现是将数据存储在cookie中,但这不是唯一的方法。通常,您将会话ID存储在cookie中,并且数据本身存储在服务器上的某个位置并通过该cookie检索。
Flask确实为您提供了一种覆盖默认会话实现的简便方法,并且有各种方法可以显示如何执行此操作 - here's显示大纲的SO问题。