Python - Get original function arguments in decorator
我正在尝试为wsgi+werkzeug应用程序中的视图编写一个"需要登录"装饰器。
为了做到这一点,我需要访问用户的会话,该会话可以通过传递到视图方法中的请求对象进行访问。
但是,我不知道如何在装饰器中得到这个请求实例。我看了PEP318,特别是第四个例子,但我不太明白。
以下是我的尝试:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | def login_required(*args, **kw): def goto_login(**kw): return redirect(url_for('login')) def decorate(f): # args[0] should be request args[0].client_session['test'] = True logged_in = 0 if logged_in: return f else: return goto_login return decorate @login_required() @expose('/hello/<string:name>') def hello(request, name): return render_template('say_hello.html', name=name) |
但我在调用
有没有任何方法可以访问"loginu required"修饰符中传递给"hello"函数的请求参数?
decorator
所以你想做的是:
1 2 3 4 5 6 7 8 9 10 | def login_required(f): # This function is what we"replace" hello with def wrapper(*args, **kw): args[0].client_session['test'] = True logged_in = 0 if logged_in: return f(*args, **kw) # Call hello else: return redirect(url_for('login')) return wrapper |
所以你需要做的就是检查:埃多克斯1〔3〕