djangoで自作デコレータを使ってみる
djangoで自作デコレータを使ってみる
djangoが用意してくれていたデコレータしか使った事がなかったので、動きを確認する為に使ってみたいと思います。今回はデコレータでrequestを受けてGETパラメータがhelloだったらページ遷移し、それ以外だったら404に飛ばしてみたいと思います。
参考:
・一番シンプルな例を載せて下さっています。
Pythonのデコレータについて
・理解が出来るように順を追って丁寧に説明して下さっています。
Pythonのデコレータを理解するための12Step
・djangoでデコレータがrequestを受け取る方法です。
私のDjangoビューデコレータがリクエストを渡さないのはなぜですか?
プログラム
忘れずにwwrpsをインポートしてあげましょう。
肝心な部分はfuncには自身のdisplay_index()が入ってくると言う事ですね。
from functools import wraps
from django.http import Http404
from django.shortcuts import render
def param_check(func):
@wraps(func)
def wrapper(request, *args, **kwargs):
print(request.GET.get('param'))
if request.GET.get('param') == 'hello':
return func(request, *args, **kwargs)
else:
raise Http404
return wrapper
@param_check
def display_index(request, *args, **kwargs):
return render(request, 'jsonapp/index.html')
無事に下記の通り遷移することが出来ました。
http://localhost:20081/jsonapp/display_index/?param=hello <- index.htmlに遷移
http://localhost:20081/jsonapp/display_index/?param=world <- 404ページに遷移
ディスカッション
コメント一覧
まだ、コメントがありません