1. ホーム
  2. django

[解決済み] クラスベース・ビューと機能ベース・ビューの比較

2023-04-13 23:24:30

質問

私は django のアプリを作るとき、いつも FBV (Function Based Views) を使っています。しかし、ほとんどの開発者は、CBV (Class Based Views) を使う方が良いと言い、CBV で実装するのが面倒な複雑なビューの場合は FBV のみを使用すると言っています。

なぜですか?CBVを使う利点は何でしょうか?

どのように解決するのですか?

最も大きな利点は、継承です。大規模なプロジェクトでは、多くの類似したビューがあることでしょう。同じコードを何度も書くよりも、単純にベースとなるビューを継承させればいいのです。

また、 django には、最も一般的なタスクのいくつかを行うために使用できる、一般的なビュークラスのコレクションが同梱されています。例えば、 DetailView クラスは、モデルの 1 つから 1 つのオブジェクトを渡し、それをテンプレートでレンダリングし、http レスポンスを返すために使われます。これをそのままURLコンフィグに差し込むことができます...

url(r'^author/(?P<pk>\d+)/$', DetailView.as_view(model=Author)),

また、カスタム機能で拡張することもできます

class SpecialDetailView(DetailView):
    model = Author
    def get_context_data(self, *args, **kwargs):
        context = super(SpecialDetailView, self).get_context_data(*args, **kwargs)
        context['books'] = Book.objects.filter(popular=True)
        return context

これで、テンプレートはレンダリングのためにブックオブジェクトのコレクションを渡されることになります。

これを始めるのによい方法は ドキュメント (Django 4.0+) をよく読むことです。

更新

ccbv.co.jp は、すでに利用可能なクラスベースのビューに関する包括的で使いやすい情報を提供しています。