10

我正在编写一个 Web 应用程序,当(且仅当)用户登录时,它会从第三方服务器接收大量数据。这些数据被解析为自定义对象并存储在list(). 现在用户在整个应用程序中处理这些数据,调用不同的视图(例如发送不同的请求)。我不确定在视图函数之间传递对象列表的最佳模式是什么?

从技术上讲,我看到了两种可能性,但在我的情况下两者都有缺点:

  1. 会话字典:在会话中存储数据是一种过度杀伤(整个列表将在每次请求时在服务器和浏览器之间来回发送)
  2. 持久化:暂时将数据持久化到数据库似乎更合适。但我希望根本不必使用数据库(除了这个临时数据,我没有任何需要在本地存储的数据。其他所有内容都是从第三方服务器接收并发送回它)。

我不是一个经验丰富的网络开发人员,所以也许我会监督显而易见的事情。那么还有另一种方法可以在请求之间传递数据吗?也许一些内置的烧瓶魔法或持久化(到文件或数据库)真的是唯一的选择吗?

4

2 回答 2

5

您可以使用Flask-Cache ( flask.ext.cache)SimpleCache实际上是werkzeug.contrib.cache.SimpleCache)将数据存储在应用程序的内存中。唯一的问题是每个服务器进程都有一个缓存实例(如果你在 uwsgi 之后,或者在 mod_wsgi 上运行,你很可能会有多个进程处理请求)。因此,用户可能会访问应用程序的一个端点,为获取数据付出代价,然后在下一个请求中,访问不同的进程并且必须再次支付该费用(因为进程 A 缓存了数据, 过程 B 没有)。

解决这个问题的唯一方法是使用进程外存储(父进程上的缓存或充当缓存服务器或某些持久性存储的单独 Python 进程 [Redis、PostGres 等])

于 2013-09-18T13:23:28.633 回答
5

尽管 Flask 的会话默认实现是将数据存储在 cookie 中,但这并不是唯一的方法。通常,您将会话 ID 存储在 cookie 中,数据本身存储在服务器上的某个位置并通过该 cookie 检索。

Flask 确实为您提供了一种覆盖默认会话实现的简单方法,并且有各种方法可以展示如何做到这一点 -这是一个显示大纲的 SO 问题。

于 2013-09-18T13:29:48.830 回答