Python caching.memoize&;内部服务器错误的响应\u筛选器

Python caching.memoize&;内部服务器错误的响应\u筛选器,python,flask,flask-caching,Python,Flask,Flask Caching,我正在使用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_缓存来缓存我的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响应”)

)

然而,我找不到这个用例的例子。它说“如果callable返回False,内容将不会被缓存。”-如何实现这个callable来检查状态代码是否为500?我想出了一个“解决方案”,但我并不完全满意

基本上,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。它似乎仍然有点不可靠,如果有人有更详细的想法,请随意发布另一个答案。

还没有测试过它,但看看文档,我会定义一个def check_500(resp):在resp中返回'500',并将参数设置为response_filter=check_500不确定如何从check_500函数中访问响应对象。奇怪的是,实际上似乎check_500()函数是在路由返回某些内容之前执行的。另外,当我尝试处理请求时,它说我是在请求上下文之外工作的,这也没有意义,因为函数是通过向api发送请求来触发的。如果你对如何实施有任何想法,我将非常感激。
def check_500(resp):
  if resp[-1] == 500:
      return False
  else:
      return True