【发布时间】:2016-01-13 11:06:28
【问题描述】:
我使用的缓存系统 (Flask-Cache) 使用 URL 来计算缓存键。我从代码中的不同位置传递了一个视图函数,然后需要检查视图是否已被缓存。
首先,Flask-Cache 的当前迭代需要计算缓存键的请求,但我做了一个patch,通过获取带有url_for(view_function.__name__, **kwargs) 的URL 来解决简单情况的不足。
问题是现在我已经开始使用Flask Blueprints,而在url_for 中简单地使用view_function.__name__ 将找不到蓝图路由(引发BuildError)。
简单的 Flask 应用
@app.route('/user/<user_id>')
def user_page(user_id):
return 'Hello user %s' % user_id
def check_cache(view_function, **kwargs):
url = url_for(view_function.__name__, **kwargs)
... use URL to check cache ...
check_cache(user_page, user_id='123')
Blueprint Flask 应用程序
from flask import Blueprint
bp = Blueprint('user_blueprint', __name__)
@bp.route('/user/<user_id>')
def user_page(user_id):
return 'Hello user %s' % user_id
def check_cache(view_function, **kwargs):
url = url_for(view_function.__name__, **kwargs) # WON'T WORK WITH BLUEPRINTS
... use URL to check cache ...
check_cache(user_page, user_id='123')
如何获取通过蓝图定义的路由/视图函数的 URL?
或者,我如何制作在使用蓝图时有效的缓存键? (并且可以通过视图函数上的装饰器计算,当两个或多个蓝图具有相同名称的视图函数时不会发生冲突)
【问题讨论】:
-
也许可以从
app.url_map或app.view_functions倒退,但我不知道怎么做? (参考:stackoverflow.com/a/32824414/118608)
标签: flask