3

我遇到了一个问题,我正在使用 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()

如果我有错误,关于如何停止缓存此视图的任何想法?

4

1 回答 1

2

您可以调用cache.delete_memoized处理after_this_request程序:

# @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 的代码,它似乎不处理视图抛出的错误。因此,您可以简单地自己引发错误并使用单独的处理程序处理异常:

@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()    
于 2014-04-23T14:26:27.200 回答