caching.memoize&响应\u内部服务器错误过滤器

2024-05-15 00:24:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用flask_缓存来缓存我的flask API的响应。我在这样的路线上使用装饰器

import random
class Status(Resource):
  @cache.memoize(timeout=60)  # cache for a minute
  def post(self):

    return random.randint(0, 5)

它将在一分钟内返回相同的随机数。但是,如果随机函数(读取:“路由内的任何功能”)中断,路由返回500个内部服务器错误,该怎么办?据我所知,flask_缓存将缓存这个,并在一分钟内返回所有后续调用的错误响应,这不是我想要的

我读了这篇文章,找到了response_filter参数,它可以很容易地添加到decorator中,似乎是为了防止这种情况发生(“有助于防止缓存代码500响应”)

https://flask-caching.readthedocs.io/en/latest/api.html?highlight=response_filter#flask_caching.Cache.memoize

@cache.memoize(timeout=60, response_filter=callable_check_for_500(???))

然而,我找不到这个用例的例子。它说“如果callable返回False,内容将不会被缓存。”-如何实现这个callable来检查状态代码是否为500?任何链接或想法感谢


Tags: 代码apiflask路由cacheforresponse错误
1条回答
网友
1楼 · 发布于 2024-05-15 00:24:34

我想出了“解决办法”,但我并不完全满意

基本上,check_500()函数在默认情况下获取参数resp,但它不是完整响应对象,不幸的是,它缺少status_code属性,正如我所预期的那样

状态代码本身就在数据中,我只是查看响应的最后一个条目,即返回的所有数据。在我的例子中,返回的json为[0],状态代码为[-1]

目前的执行情况如下:

  @cache.memoize(timeout=60, response_filter=check_500)  # cache for a minute

使用上面定义的可调用check_500函数

def check_500(resp):
  if resp[-1] == 500:
      return False
  else:
      return True

这与评论中建议的高于c_水平非常相似,因此非常感谢,但是我建议查看响应的最后一个索引,而不是检查响应数据中是否有500。这似乎仍然有点不可靠,如果有人有更详细的想法,请随时发布另一个答案

相关问题 更多 >

    热门问题