【发布时间】:2013-11-03 16:15:47
【问题描述】:
我正在使用 Flask 并使用 before_request 装饰器发送关于 对分析系统的请求。我现在正在尝试创建一个装饰器 防止在几条路线上发送这些事件。
我遇到的问题是让我的装饰器在 before_request 之前被调用 信号被触发。
def exclude_from_analytics(func):
@wraps(func)
def wrapped(*args, **kwargs):
print "Before decorated function"
return func(*args, exclude_from_analytics=True, **kwargs)
return wrapped
# ------------------------
@exclude_from_analytics
@app.route('/')
def index():
return make_response('..')
# ------------------------
@app.before_request
def analytics_view(*args, **kwargs):
if 'exclude_from_analytics' in kwargs and kwargs['exclude_from_analytics'] is True:
return
【问题讨论】:
-
不是重复的,但可能会给你一些想法:stackoverflow.com/questions/14367991/…
-
这就是我们目前正在做的事情,但是随着路由和代码库数量的增长,它绝对不是一个可扩展的解决方案。
-
我的想法是让“exclude_from_analytics”装饰器在视图函数本身上放置一个属性,然后使用 Flask API 从端点获取视图函数并检查属性。
-
仅供参考,
app.route()必须是最顶层的装饰器。否则你的包装函数永远不会被使用。现在你有这个:exclude_from_analytics(app.route(index))- 如你所见,原始函数被传递给app.route()