【Django】FBV と CBV どちらを採用するか

django

Django の View の定義には FBV (Function Based View) と CBV (Class Based View) について説明します。

FBV

関数型の View です。

シンプルに定義することができ手軽に実装ができます。

チュートリアルサイトで紹介されているのがこの形なので最初に使うのはこちらが多いでしょう。

# views.py
def detail(request, id):
    return HttpResponse(f"ID={id}")

# urls.py
from django.urls import path
from . import views

urlpatterns = [
    path("<int:id>/", views.detail, name="detail"),
]

デコレータを使って制約などをつけることができます。

CBV

クラス型の View です。

クラスを定義する必要がありますが Django に用意されている組み込みの View を継承することで処理の共通化などができます。

# views.py
from django.views.generic import TemplateView


class AboutView(TemplateView):
    template_name = "about.html"

# urls.py
from django.urls import path
from . import views

urlpatterns = [
    path("about/", AboutView.as_view()),
]

どちらを採用すべきか

個人的には CBV 一択と考えています。

クラスを定義することを好むということもありますが、組み込みの View を使えることや継承で共通化が図りやすいことから CBV を採用しています。

また、 Model と直接連動する View も用意されているため、View から直接 Model を操作する場合に実装量を抑えることもできます。

FBV を全く使用しないということでもなく共通化を考えなくて良い場面やわざわざクラスを定義する必要が無い View を使いたいときにたまに使っています。

Django 初心者であればどちらも使ってみて使いやすい方を選択するということで良いかと思います。

作るシステムやプロジェクトの規模などでも選択できるかと思います。

参考サイト

Class-based views | Django documentation
The web framework for perfectionists with deadlines.
タイトルとURLをコピーしました