基于类的视图 VS 基于函数的视图

新手上路,请多包涵

在创建 Django 应用程序时,我总是使用 FBV(基于函数的视图),因为它非常容易处理。但是大多数开发人员表示,最好使用 CBV(基于类的视图),如果复杂的视图很难用 CBV 实现,则只使用 FBV。

为什么?使用 CBV 有哪些优势?

原文由 catherine 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 528
2 个回答

最显着的优点是继承。在大型项目中,您可能会有很多相似的视图。不必一次又一次地编写相同的代码,您可以简单地让您的视图从基础视图继承。

Django 还附带了一组通用视图类,可用于执行一些最常见的任务。例如,DetailView 类用于从您的模型之一传递单个对象,使用模板呈现它并返回 http 响应。你可以直接把它插入你的 url conf..

 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.uk 拥有全面且易于使用的关于您已有的基于类的视图的信息。

原文由 Aidan Ewen 发布,翻译遵循 CC BY-SA 4.0 许可协议

当我开始使用 DJango 时,我从未使用过 CBV,因为它们的学习曲线和有点复杂的结构。快进两年多了,我只在少数几个地方使用 FBV。我确信代码会非常简单并且会保持简单。

CBV 和多重继承的主要好处是我可以完全避免编写信号、辅助方法和复制粘贴代码。特别是在应用程序做的不仅仅是基本的 CRUD 操作的情况下。具有多重继承的视图比具有信号和辅助方法的代码更容易调试,尤其是在它是未知代码库的情况下。

除了多重继承 CBV 之外,CBV 还提供不同的方法来执行分派、检索模板、处理不同的请求类型、传递模板上下文变量、验证表单等等。这些使代码模块化,因此可维护。

原文由 iankit 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题