デコレーション

修飾子「@」を使用するデコレーション記述。テストした環境は Python2.5.2 っていうか app-engine-patch(google app engine)。

  • urls.py
urlpatterns = auth_patterns + patterns('',
    (r'^wkwk/showChar', 'wkwk.views.showChar'),
    (r'^wkwk/showPost', 'wkwk.views.showPost'),
) + urlpatterns

テスト用アプリケーション「wkwk」ワクワク

  • wkwk/views.py
# -*- coding: utf-8 -*-
from django.http import HttpResponse

def Deco(f):
    def main_deco(request):
        if f.func_name == 'showChar' :
            return f(request, 'b')
        else :
            return f(request)
    return main_deco

@Deco
def showChar(request, char):
    if char == 'a' :
        text = 'char is a'
    elif char == 'b' :
        text = 'char is b'
    else :
        text = 'char is other'
    return HttpResponse(text, mimetype='text/plain')

@Deco
def showPost(request):
    if request.POST.has_key('char') :
        text = 'POST[char] is ' + request.POST['char']
    else :
        text = 'POST[char] is None'
    return HttpResponse(text, mimetype='text/plain')

で、テスト

# http://localhost:8000/wkwk/showChar へアクセスすると以下が出力された
# char is b

# http://localhost:8000/wkwk/showPost へアクセスすると以下が出力された
# POST[char] is None

ありがちな、各機能の前処理(認証等)や後処理(出力フォーマット)などが楽になるーと思った。


参考にしたところ