[解決済み] クラスベース・ビューと機能ベース・ビューの比較
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 は、すでに利用可能なクラスベースのビューに関する包括的で使いやすい情報を提供しています。
関連
-
Djangoキャッシュの説明
-
[解決済み] Django のカスタムフィールドで User モデルを拡張する
-
[解決済み] Djangoのテンプレートからsettings.pyの定数にアクセスすることは可能ですか?
-
[解決済み] (13: Permission denied) 上流:[nginx]に接続中。
-
[解決済み] Django Southを使用して移行履歴をリセットするための推奨される方法は何ですか?
-
[解決済み] django のクラスベースのビューで permission_required デコレータを使用する方法
-
[解決済み] Django - 外部キーのプロパティでフィルタリングする
-
[解決済み] Djangoのデータベースクエリ。id でオブジェクトを取得するには?
-
[解決済み] django テンプレートで "ブロック" を繰り返す方法
-
[解決済み] あるdjangoアプリから新しいアプリにモデルを移行するにはどうしたらいいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Django2.2エラー - AttributeError: ''str'' オブジェクトに ''decode'' 属性がない。
-
6.5、Django - モデルでJSONFieldを使用してJSONフィールドでMySQLテーブルを作成する
-
Django ForeignKey逆引きクエリにおけるfilterと_setの効率比較
-
[解決済み] Django の管理者パスワードをリセットする方法は?
-
[解決済み] Djangoのテンプレートからsettings.pyの定数にアクセスすることは可能ですか?
-
[解決済み】Djangoでモデルインスタンスをシリアライズする方法は?
-
[解決済み] Django ORM のクエリセットに対応する SQL クエリを表示するには?
-
[解決済み] Djangoのクッキー、どうすれば設定できますか?
-
[解決済み] Djangoテンプレートでネストされたforループで一番外側のforloop.counterにアクセスする方法は?
-
[解決済み] DjangoでSELECT COUNT(*) GROUP BYとORDER BYを行うにはどうすればよいですか?