(最終更新月:2021年8月)
「クラスベースビューってなに??」
「ファンクションビューとなにが違うの?」
「クラスベースビューの書き方は?」
といったDjango初学者の方へ向けた、
クラスベースビューの基本
について解説をした記事となります
ファンクションビューの良いところは自由に、直感的にコードが書けるところです
対して、クラスベースビューは既存のメソッドを覚える必要があるのでとっつきにくいのも事実です
ただ、Webアプリには構造上共通した項目やページも多いので、クラスベースビューを使うとPythonクラスの特徴である「継承」を使い、より洗練されたコードが描けるようになります
是非ここでクラスベースビューの概要をマスターして、クラスベースビューとファンクションビューを上手に使い分け、アプリ制作に励みましょう!
クラスベースビューとは?
クラスベースビューを使うことで、既存のクラスを継承し、よりスッキリとしたDRY(Don’t Repeat Yourself)な記述ができるようになります
例えばファンクションビューでは、
return render(request, テンプレート名)
とすることでHTMLテンプレートをレンダーしますが、
クラスビューでは、
template_name = テンプレート名
と値を代入するだけで自動的に表示されます
別の例としては、ファンクションビューでQuerySetを取得してHTMLテンプレートに渡すには、
qs = モデル名.objects.all() context = {"object_list": qs} return render(request, テンプレート名, context)
などと記述する必要があるのに対して、クラスベースビューでは、
template_name = テンプレート名 model = モデル名
とするだけで、QuerySetがテンプレートへ渡されます
これも既存クラスを継承したことで成せる技です
次章で「クラスビューの書き方」を解説しますので、まずは触れてみて良さを感じてください!
クラスベースビューはこれで書ける!
下記のステップをふめば簡単にクラスベースビューが完成します
- 既存のクラスをインポート
- 継承クラスを作成
- 最低限必要な変数を定義
- urls.pyでアドレスに紐付ける
1 – 3はそれぞれのクラスにより異なりますので、次章以降で個別にご説明します
ここでは4のurls.pyの書き方について解説します
[urls.pyでの書き方]※作成したクラスビュー名を「CustomView」とします
from django.urls import path
from .views import CustomView #作成したクラスベースビュー名
urlpatterns = [
...,
path("custom-view/", CustomView.as_view()),
...,
]
特に2つ目の「.as_view()」はファンクションビューでは出てこないので、覚えておくようにしましょう!
path(“アドレス/”, クラス名.as_view())
それでは、基本的な「ビュークラス」を見ていきましょう!
TemplateView
HTMLテンプレートを表示する
というシンプルな役割を担っています
指定する変数
template_name
「template_name」に代入されたテンプレートがレンダーされます
コード例
from django.views.generic import TemplateView
class CustomTemplateView(TemplateView):
template_name = "itc/my-template.html"
よく使うメソッド
get_context_data
HTMLテンプレートへ値を渡します
FormView
変数「form_class」に指定されたフォームクラスを表示します
指定する変数
template_name form_class
「template_name」に代入されたテンプレートがレンダーされます
「form_class」に代入したフォームクラスがContextとしてテンプレートへ渡されます
コード例
[forms.py]
from django import forms
class CustomForm(forms.Form):
title = forms.CharField(max_length=50)
content = forms.CharField(max_length=255)
[views.py]
from django.views.generic import FormView
from .forms import CustomForm
class CustomFormView(FormView):
template_name = "itc/custom-form.html"
form_class = CustomForm
よく使うメソッド
get_form_kwargs
form_classへ任意の値を渡せます
get_context_data
HTMLテンプレートへ値を渡します
form_valid
フォームが正しく送信された時に処理が行われます
CRUDに関するクラスベースビュー
その他にも、
- ListView
- DetailView
- CreateView
- UpdateView
- DeleteView
など、より目的がはっきりとしたCRUDに関するクラスベースビューも用意されています
CRUDに関するクラスベースビューについてはこちらでそれぞれご紹介していますので興味のある方はご覧ください↓
まとめ
クラスベースビューは記述する前に覚えておく事があるため、まっさらな状態で始めても上手くいきません
当記事を通じて伝えたいことは、
- クラスベースビューでは定義すべき変数を覚える事
- クラスベースビューでは上書きできるメソッドを覚える事
- urls.pyでは、クラス名.as_view()で表記する事
です
「クラスベースビューって思ったより使えるじゃん!」と思われた方がいらっしゃれば幸いです
また、よく使うメソッドとしていくつかご紹介致しましたが、詳しくはこちら↓で解説をしております