[英]How to invalidate or delete a redis cache object if an error in Flask view
我在使用 Flask 緩存模塊時遇到了一個問題,如果出現運行時錯誤,我不希望緩存視圖。
誰能建議如何做到這一點?
這是我想要實現的目標。
from flask import Flask
from flask.ext.cache import Cache
app = Flask(__name__)
mycache = Cache()
mycache.init_app(app)
@mycache.cached()
@app.route('/myview')
def process_view():
try:
return get_something()
except:
return print_error_and_no_cache_this_view()
如果我有錯誤,關於如何停止緩存此視圖的任何想法?
您可以在after_this_request
處理程序中調用cache.delete_memoized
:
# @cached needs to be invoked before @route
# because @route registers the handler with Flask
# and @cached returns a different function.
# If you @route first and then @cache Flask will
# always execute the *uncached* version.
@app.route('/myview')
@mycache.cached()
def process_view():
try:
return get_something()
except:
@app.after_this_request
def clear_cache(response):
mycache.delete_memoized('process_view')
return response
return print_error_and_no_cache_this_view()
或者,查看 Flask-Cache 的代碼,它似乎不處理 view 拋出的錯誤。 因此,您可以簡單地自己引發錯誤並使用單獨的處理程序處理異常:
@app.route('/myview')
@mycache.cached()
def process_view():
try:
return get_something()
except Exception as e:
raise ProcessViewIssue(e)
@app.errorhandler(ProcessViewIssue)
def handle_process_view_error(e):
return print_error()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.