はじめに
大高隆・著「動かして学ぶ!Python Django開発入門」を使用して
python・Djangoの学習を始めた初学者です。
ruby・railsを使用して4ヶ月ほどプログラミングの勉強をしていましたが、
エンジニア転職にあたり、pythonを使用することになったのでこの本を片手に勉強を始めました。
ド級の素人なので、補足・ご指摘等コメントいただけると大変助かります。
概要
railsアプリを作成する際に使っていたbefore_actionのように、
決まった処理を指定した汎用ビューの前に差し込む。これをdjangoでもやりたかった。
具体的には、、、、
クラスベース汎用ビューのtemplate表示前に、セッションに特定の値があるか確認。
→あり:そのまま表示
→なし:index画面にリダイレクト
という処理にしたい。
考察
@login_requiredでログインしてるか確認できるなら、
自分でも同じようなものが作れるのでは、、、?
いや、できないはずはない。
↓
どうやら「@〜」はデコレータというものらしい。
そしてやはり自作できるっぽい。
共通して行いたい処理を記述。
今回は、「セッションの中に特定の値があるかどうか」。
def is_hoge_in_session(func):
def hoge_checker(request):
if 'hoge' in request.session:
return func(request)
else:
return redirect("hogeApp:index")
return hoge_checker
コードの中身については、偉大な先人の方々の解説がわかり易すいかと。
・【Python】初心者向けにデコレータの解説
・DjangoにおけるDecoratorの使い方とその作り方
対象のクラスビューの上に載せるだけ。
# method_decoratorをインポート
from django.utils.decorators import method_decorator
、、、(中略)、、、
@method_decorator(is_hoge_in_session, name='dispatch')
class HogeFugaView(LoginRequiredMixin, generic.ListView):
、、、(以下略)
ちなみにクラスベースビューで関数デコレータを扱う方法に関しては
下記サイトより知恵を授けていただきました。
【Django】クラスベースビューで関数のデコレータを使用する方法
今回のまとめ
ドブに捨ててしまった時間
→2時間
感想:
→初学者でも、周りに開発中の言語についてのスペシャリストな先輩がいなくても、
大丈夫、私にはgoogle大先生がいる。あとは気合い。
偉大な参考記事
・【Django】クラスベースビューで関数のデコレータを使用する方法
・【Python】初心者向けにデコレータの解説
・DjangoにおけるDecoratorの使い方とその作り方