【发布时间】:2014-02-16 15:07:50
【问题描述】:
我需要在 Flask 路由函数中添加一个 python 装饰器,(基本上我从here 编辑了代码)
def requires_admin(f):
def wrapper(f):
@wraps(f)
def wrapped(*args, **kwargs):
#if not admin:
#return render_template('error.html')
return f(*args, **kwargs)
return wrapped
return wrapper
并像这样使用它就可以了:
@app.route('/admin/action')
@requires_admin
def AdminAction():
#NO error if NO parameter
但是这样使用会报错:
@app.route('/admin/action/<int:id>')
@requires_admin
def AdminAction(id):
在 Flask 0.10 中,我得到这样的错误(我刚刚从 Flask 0.9 更新到 0.10,而在 Flask 0.9 中没有这样的语法错误):
@requires_admin
File "/usr/local/lib/python2.6/dist-packages/Flask-0.10.1-py2.6.egg/flask/app.
py", line 1013, in decorator
self.add_url_rule(rule, endpoint, f, **options)
File "/usr/local/lib/python2.6/dist-packages/Flask-0.10.1-py2.6.egg/flask/app.
py", line 62, in wrapper_func
return f(self, *args, **kwargs)
File "/usr/local/lib/python2.6/dist-packages/Flask-0.10.1-py2.6.egg/flask/app.
py", line 984, in add_url_rule
'existing endpoint function: %s' % endpoint)
AssertionError: View function mapping is overwriting an existing endpoint functi
on: wrapper
我对装饰器的东西很陌生,我该如何纠正这个错误?
【问题讨论】:
-
不是 100% 确定,但您可能需要为路由提供
endpoint参数?见stackoverflow.com/questions/17540754/… -
@will-hart 我刚刚更新了这个问题。只有带参数才会出错。
-
@JamesKing 这是stackoverflow.com/questions/28381560/… 一个很好的问题。你只是因为缺乏努力而投了反对票。回来尝试,我会准备提供答案。
-
@Avinash Raj 感谢您的关注。我自己解决了这个问题。我的问题实际上是如何使用 Python 内联编辑文件。答案是
import fileinput