我是否正确阅读了这个特定的Python代码?

时间:2015-07-06 17:19:32

标签: python flask decorator

这是我正在使用的一段代码。我想确认一下我是否正确阅读:

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)函数中感到困惑。

1 个答案:

答案 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)

也就是说,装饰函数作为参数调用。