WSGI + Werkzeugアプリケーションのビュー用に「login_required」デコレータを作成しようとしています。
これを行うには、ビューメソッドに渡される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」関数に渡されたリクエスト引数にアクセスする方法はありますか?
デコレータ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
kwargs
は、引数をキーとして、値を値として含む辞書です。
だからあなたがする必要があるのはチェックすることだけです:some_var = kw['my_property']