【完全版】Django クラスベースビューを実例付で徹底解説!

Django

(最終更新月:2021年8月)

「クラスベースビューってなに??」

「ファンクションビューとなにが違うの?」

「クラスベースビューの書き方は?」

といったDjango初学者の方へ向けた、

クラスベースビューの基本

について解説をした記事となります

ファンクションビューの良いところは自由に、直感的にコードが書けるところです

対して、クラスベースビューは既存のメソッドを覚える必要があるのでとっつきにくいのも事実です

ただ、Webアプリには構造上共通した項目やページも多いので、クラスベースビューを使うとPythonクラスの特徴である「継承」を使い、より洗練されたコードが描けるようになります

是非ここでクラスベースビューの概要をマスターして、クラスベースビューとファンクションビューを上手に使い分け、アプリ制作に励みましょう!

✔月9,800円でWebデザインが学べる

デザナルは、Webデザインに苦手意識がある方におすすめのサブスク型スクールです。

特徴は以下の通り。

  • 初期費用不要
  • 教材が使い放題
  • 案件で収入も得られる

デザナルは稼ぎながら学べる、格安のWebデザインスクールです。

>>詳細はこちら<<

安いWebデザインスクール「デザナル」を徹底分析

クラスベースビューとは?

クラスベースビューを使うことで、既存のクラスを継承し、よりスッキリとした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がテンプレートへ渡されます

これも既存クラスを継承したことで成せる技です

次章で「クラスビューの書き方」を解説しますので、まずは触れてみて良さを感じてください!

クラスベースビューはこれで書ける!

下記のステップをふめば簡単にクラスベースビューが完成します

  1. 既存のクラスをインポート
  2. 継承クラスを作成
  3. 最低限必要な変数を定義
  4. 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()),
    ...,
]
urls.pyの記述で覚えておきたいこと
  • views.pyより、作成したビュークラスのインポートすること
  • ビュークラス名に続いて、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()で表記する事

です

「クラスベースビューって思ったより使えるじゃん!」と思われた方がいらっしゃれば幸いです

また、よく使うメソッドとしていくつかご紹介致しましたが、詳しくはこちら↓で解説をしております

タイトルとURLをコピーしました