【发布时间】:2016-10-10 12:01:07
【问题描述】:
我想制作一个 Python 装饰器,它可以接受一个参数(它正在装饰的函数中的参数名称)并使用该参数来查找函数中参数的值。我知道这听起来非常令人困惑,哈!但我想要做的看起来像这样(这是一个 Flask 网络应用程序):
这就是我现在拥有的:
@app.route('/admin/courses/<int:course_id>')
def view_course(course_id):
... view code here
我想做这样的事情:
@app.route('/admin/courses/<int:course_id>')
@access_course_permission(course_id)
def view_course(course_id):
... view code here
现在我知道我可以这样做:
def access_course_permission(f):
@wraps(f)
def decorated_function(*args, **kwargs):
# check args[0] right here to find the course ID
return f(*args, **kwargs)
return decorated_function
只要 course_id 始终是第一个参数,它就可以很好地工作。然而,事实并非如此。这就是为什么我希望能够指定名称。
如果这不可能,我想我可以将参数的索引传递给装饰器,但这不是很好......
【问题讨论】:
标签: python flask decorator python-decorators