这是我正在使用的一段代码。我想确认一下我是否正确阅读:
def login_required(f):
@wraps(f)
def wrap(*args, *kwargs):
if 'logged_in' in session:
return f(*args, **kwargs)
else:
flash('You need to log in first.')
return redirect(url_for('logging')
return wrap
@app.route('/')
@app.route('/index')
@login_required
def index():
return render_template('index.html',
title='test home title')
跟随此问题时让我感到困惑的是f
变量。
因此Login_required()
被称为我的index()
函数的装饰器。它看起来像:
login_required(index()).
f
变量是login_required(f())
还是login_required(index(f))
?
当login_required()
与f
一起返回时,我会在(*args, *kwargs)
函数中感到困惑。
答案 0 :(得分:2)
f
变为index
。这样:
@login_required
def index():
return render_template('index.html',
title='test home title')
与此相同:
def index():
return render_template('index.html',
title='test home title')
index = login_required(index)
也就是说,装饰函数作为参数调用。