2009-06-17 28 views
18

WSGI + Werkzeugアプリケーションでビューの "login_required"デコレータを記述しようとしています。Python - デコレータの元の関数引数を取得

これを行うには、ユーザーのセッションにアクセスする必要があります。このセッションは、ビューメソッドに渡されるRequestオブジェクトからアクセスできます。

デコレータのRequestのインスタンスを取得する方法がわかりません。私はPEP318、特に4番目の例を見ましたが、私はそれを得ていません。

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) 

が、私はargs[0]を呼び出そうと境界エラーのうちのインデックスを取得:

は、ここで私がしようとしているものです。

"login_required"デコレータの "hello"関数に渡されたリクエスト引数にアクセスできる方法はありますか?

答えて

23

デコレータlogin_requiredにはこの場合の機能(hello)が渡されます。

だから、あなたが何をしたいです:

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

パーフェクト:

だからあなたがする必要があるすべてはチェックです!私は "公開"デコレータで使用された別の構文を使用していました - 私は代替構文を理解しているか分からない。 – ashgromnies

2

kwargsは、値としてキーと値として引数を含む辞書です。 some_var = kw['my_property']

関連する問題