【发布时间】:2015-09-18 02:16:36
【问题描述】:
我正在尝试写我的第一个decorator,但有点迷茫。我希望 decorator 在执行主函数之前检查 request 是否来自特定地址。
目前我有:
def check_referrer(url):
def func_wrapper():
if request.referrer == url:
return render_template('index.html', error=None)
else:
return render_template('login.html', error="some_error")
return func_wrapper
@app.route('/index', methods = ['GET'])
@check_referrer("/venue/login")
def index():
return
@app.route /venue/login(此代码已简化)
@app.route('/venue/login', methods=['GET', 'POST'])
def login():
error = None
if login_valid():
return redirect(url_for('index'))
else:
error = 'Invalid Credentials. Please try again.'
return render_template('login.html', error=error)
1) 我确信我正在做的事情存在一些问题,但我首先需要了解我收到错误的原因:
TypeError: func_wrapper() takes no arguments (1 given)
我以为我只是将argument 传递给check_referrer。
2) 我的return 语句正确吗?
任何帮助将不胜感激!
【问题讨论】:
-
func_wrapper必须接受被包装的函数作为参数。def func_wrapper(f):也许this 会有所帮助。
标签: python flask decorator restful-authentication