【Django】クラスベースビュー(Class-based View)の操作入門|PythonでWebアプリ開発#12

こんにちは、Kosei(@kay_diacc2)です!

本記事はDjangoのクラスベースビュー(Class Based View)の概要説明した記事です。「そもそもクラスベースビューとは何か?」「ビュークラスとビュー関数の記述方法の違いは?」「代表的なクラスベースビューではどんなことができる?」このような疑問にお応えします。

目次

クラスベースビュー(Class Based Views)とは?

クラスベースビューは関数で記述したView(Function Based Views)とは異なり、Classで記述する方法を指します。クラスベース汎用ビュー(Class Based Generic Views)とも呼ばれます。

クラスベースビューはDjangoに用意されたdjango.generic.viewからViewクラスを継承またはミックスインして作成するのが特徴的です。Viewクラスはアプリケーション用途に応じた豊富なメソッドを揃えており、これを使いこなせると関数形式で記述していたViewよりもさらにシンプルかつ分かりやすいコードで表現できるようになります。

コード量の低減(Less Code)および冗長・重複したコードを記述しない(Don’t Repeat Yourself)がDjangoの設計思考であるため、クラスベースビューの利用が推奨されている側面もあります。

本記事では、下記の内容を順番にご紹介していきます。

  1. 代表的なViewクラスの概要説明
  2. View関数とViewクラスのコーディング比較
  3. 代表的なクラスベースビューを用いてWebアプリを実装する方法

代表的なViewクラスと役割一覧

Djangoには多様な用途のアプリケーションに対応したViewクラスが用意されています。以下特に利用頻度の高いものを示します。

ビュークラス名 概要 利用画面例
View get()、post()などHTTPメソッドに特化したビュー 画面全般
TemplateView テンプレートファイルを読み込み、ページ生成するための便利機能が揃った最も代表的なビュー 画面全般
ListView データベースと連携し、複数レコードの特定情報を一覧表示する際に利用 一覧画面
DetailView データベースと連携し、単一レコードの詳細情報を表示する際に利用 詳細画面
CreateView データベースと連携し、レコード生成する際に利用 新規登録・追加画面
UpdateView データベースと連携し、レコードの中身を編集する際に利用 編集画面
DeleteView データベースと連携し、レコード削除する際に利用 削除画面
FormView フォームを実装する際に利用 問い合わせ
LoginView ログイン機能実装時に利用 ログイン
APIView 外部APIを用いたロジック構築時に利用。実装時はDjango Rest frameworkの知識が必要

ViewクラスとView関数の違い・コード比較

それでは実際にコードを見ながらクラスベースビューの特徴を理解していきましょう。

基本的なViewクラスとView関数のコードを比較に際して、上記テンプレートファイル(Index.html)に処理を反映した場合を示します。以下Views.pyおよびurls.pyの記述の違いを見てみましょう。

Views.py比較

GetおよびPost処理を記述したい場合、Viewクラスを用いるとそれぞれを関数で分けて表現できるため、直感的に分かりやすく記述できます。

views関数の場合

from django.shortcuts import render

def index(request):
    if request.method == "GET":
        params = {"message":"View関数:Get処理"}
        return render(request,"Index.html",params)

    if request.method == "POST":
        params = {"message":"View関数:Post処理"}
        return render(request,"Index.html",params)

viewsクラスの場合

from django.views.generic import View
from django.shortcuts import render

class CBView(View):
    def get(self,request):
        params = {"message":"クラスベースView:Get処理"}
        return render(request,"Index.html",params)

    def post(self,request):
        params = {"message":"クラスベースView:Post処理"}
        return render(request,"Index.html",params)

urls.py比較

Viewクラスを用いる際は、クラス名の後にas_view()と記載します。

from django.urls import path
from .(views.pyディレクトリ名) import views

urlpatterns = [

    # View関数をURLマッピング
    path("FBV", views.index),
    
    # ViewクラスのURLマッピング         
    path("CBV", views.CBView.as_view()),
]

テンプレート(HTML)比較

ViewクラスおよびView関数において、用いるテンプレートは同じものを利用できます。特にViewクラスを利用するからといってテンプレート側で特殊な処理を施す必要はありません。

テンプレートのサンプルとして下記を掲載します。前述のViewクラスコードの動作確認等でお使い下さい。

<!DOCTYPE html>
<html lang="ja" dir="ltr">
  <head>
    <meta charset="utf-8">
    <title></title>
  </head>
  <body>
    <h1>View関数とViewクラスの比較</h1>
    <h2>{{ message }}</h2>
  </body>
</html>

代表的なクラスベースベースビューを用いてWebアプリを実装

ここからは個々のViewクラスを用いてWebアプリを作成します。以下の記事では実装手順から各Viewクラスの基本操作を詳しく解説していますため是非ご覧ください!

TemplateView

TemplateViewは最もよく用いられるViewクラスであり、簡単にテンプレートファイルと連携できるのが特徴です。TemplateViewの詳細や実装方法は下記の記事にまとめていますので是非ご覧ください。

ListView

データベースと連携し、複数レコードの特定情報を一覧表示する際に用いるListViewの基本操作解説記事です。主に一覧画面を実装する際に広く利用されています。

DetailView

データベースと連携し、単一レコードの詳細情報を表示する際に用いるDetailViewの基本操作解説記事です。上記ListViewとセットで用いられることが多く、詳細画面を実装する際に広く利用されています。

CreateView,UpdateView,DeleteView

データベースと連携し、CRUD機能を実装する際に用いるCreateView, UpdateView, DeleteViewの基本操作解説記事です。

Djangoまとめ

最後までご覧いただきありがとうございました。当サイトではDjangoフレームワークを用いた用途別解説記事を多数取り扱っております。是非合わせてご覧ください。

Djangoを学習したい方向けにおすすめできる教材も紹介しています。是非ご覧下さい。

最後に

この記事が気に入ったら
フォローしてね!

本記事をシェア!
URLをコピーする
URLをコピーしました!
目次
閉じる