问题标签 [flask-cache]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1037 浏览

python - 如何使用由烧瓶缓存创建的缓存值

我在应用程序中使用烧瓶缓存并尝试在单独的进程中预填充缓存。问题是我无法弄清楚缓存值的存储格式。

查看缓存的值,它们看起来像是被腌制过的,但缓存函数创建的值与普通腌制值略有不同,不能直接取消腌制。这是一个例子:

这是我的烧瓶视图:

这是我认为存储在redis中的缓存值:

注意缓存的字节串有一个前导“!”。与手动酸洗 'foo' 相比:

后者可以被 unpickle,但尝试 unpickle 烧瓶缓存值会导致错误“_pickle.UnpicklingError: invalid load key, '!'”。

因为我不完全理解问题,所以我不习惯实施解决方案(例如,在所有字节串上删除/添加“!”)。我在正确的轨道上吗?

0 投票
1 回答
521 浏览

flask - Flask / Jinja 记忆

我一直在尝试使用 Flask-Cache 的 memoize 功能只返回 statusTS() 的缓存结果,除非在另一个请求中满足某个条件,然后删除缓存。

但它并没有被删除,并且 Jinja 模板在实际上应该显示 Offline 时仍然显示 Online,因为服务器已停止。因此,它不应该返回缓存的结果。

神社模板:

这将呈现视图:

这是应该删除条目的内容。

0 投票
1 回答
5768 浏览

python - 烧瓶缓存不缓存

我遵循了Flask-Cache 的教程并尝试自己实现它。给定以下示例,为什么 Flask 不缓存时间?

输出始终是当前时间。

似乎每个请求都会重新创建缓存。我究竟做错了什么?

编辑:我使用 Python 2.7.6 执行以下 python 文件:

0 投票
1 回答
2049 浏览

python - 使用 Flask-Cache 缓存非视图函数的结果

我想使用 Flask-Cache 来缓存不是视图的函数的结果。但是,它似乎只有在我装饰视图功能时才有效。Flask-Cache 可以用来缓存“正常”功能吗?

如果我装饰视图函数,缓存会起作用。

如果我装饰一个“普通”函数并从视图中调用它,它就不起作用。

如果我key_prefix对两个功能都使用相同的功能,它也可以工作。我认为这是一个线索,表明它自己的缓存正在正确初始化,但我调用简单方法或定义它的方式是错误的。

0 投票
1 回答
6702 浏览

python - 使用 Flask Cache 和 memcached 存储简单的键值对

如何使用 Flask Cache 存储简单的键值对?像这样的东西:

现在我只使用 cache.cached() 装饰器存储函数的返回值。该方法可以正常工作,但是我不知道如何在该函数自己超时之前手动清除该函数的缓存。

理想情况下,我希望能够基于键设置缓存值,就像在示例中一样。是否可以使用 memcached 作为后端?

0 投票
1 回答
1126 浏览

python - 在烧瓶路由缓存中存储计算

我有一个很长的任务进入 python-rq 工作队列。

我正在flask-cache尝试将结果保存为它的计算,最多只需要每周运行一次,每月一次也足够了。

我遇到的问题是,当它运行时,它会缓存失败的响应,而不是实际的解决方案。

还有其他方法可以做到这一点吗?或者建议我应该如何处理这个问题?

0 投票
1 回答
56 浏览

python - 路由超时,所以 memoize 不起作用

我有当前路线

当我在本地运行它时,它工作正常,因为它不会超时。在结果保存到缓存中并在随后的重新加载时立即加载该函数后,它会立即加载。但是一旦我在运行路由时将它放在服务器上,它就会超时。

即使任务在超时后完成,当我重新加载函数时,它也会重新运行任务,而不是从缓存中调用它。

我应该这样做吗?

0 投票
1 回答
124 浏览

python - Flask-cache 为 int 和 long 参数生成不同的键

Flask-cache 使用函数参数来生成缓存键,但是它为 long 和 int 类型的参数生成不同的键:

foo(1)并且foo(1L)会生成不同的缓存键,我该怎么做才能将它们的返回值分配给相同的缓存键?

0 投票
1 回答
988 浏览

python - Flask-Cache 不区分 GET 和 POST

我有一个结构如下的烧瓶路线:

给定页面的 '/rootpath2/' 的 POST 通常从缓存中检索(当存在缓存值时),这通常是最后一个 GET 请求。

例如,用户将访问“/rootpath2/myform”,填写并提交表单。该表单将发布到“/rootpath2/myform”,并且用户将返回到相同的 URI,并显示一条消息,表明表单提交成功(或者发生错误,如果他们这样做了)。

这里的问题是 GET 总是在 POST 之前,而 POST 总是触发缓存命中并返回该值。

Flask-Cache 有没有办法区分 GET 和 POST 并根据它们进行处理(仅缓存 GET)?

0 投票
0 回答
151 浏览

angularjs - Flask:未经身份验证的用户看到缓存的应用程序,没有被重定向到登录页面

我有一个烧瓶应用程序,它只为经过身份验证的用户提供 Angular JS 应用程序。

为应用程序服务的视图的访问控制是使用 Flask-Login 包中的 @login_required 实现的,如下所示:

但是,我注意到在注销后,尝试查看此视图​​的未经身份验证的用户不会被重定向到登录页面,而是会看到应用程序的缓存版本。

我在运行开发服务器的 Google Chrome 和 Firefox 上观察到了这种行为。

如何仅在未经身份验证的用户的情况下强制不缓存?(我仍然可能希望为登录的用户进行缓存。)(stackoverflow 上的相关问题/答案似乎只解决了独立于身份验证状态的禁用缓存期,这让我觉得这是一种不必要的妥协。)

检查 Firebug 中的 XHR 日志似乎表明浏览器甚至从未向受保护的应用程序视图发出原始请求。它只是直接从缓存中加载。

编辑1:

一种可能性是在前端应用程序中检查身份验证,如果未通过身份验证,则强制重定向到登录页面,但是我对可以“自动”处理此问题的后端解决方案感兴趣,以避免额外的前端需要注意(毕竟,这不是@login_required,从道德上讲,应该/确实声称要做吗?)。