2013-02-09 125 views
39

我创建django应用程序时总是使用FBV(基于功能的视图),因为它非常容易处理。但是大多数开发人员表示,使用CBV(基于类的视图)更好,并且如果复杂的视图会使用CBV,那么使用FBV会更好。基于类的视图和基于视图的功能

为什么?使用CBV有什么好处?

+9

“大多数开发者”?真?我相当怀疑这一点。就我个人而言,虽然我认识到CBV在某些情况下很好,但我几乎从不使用它们。 – 2013-02-09 19:33:42

+2

是的,这是我读过的书中所陈述的,但我不知道这一点。我真的很喜欢使用FBV而不是CBV。 – catherine 2013-02-10 07:16:44

+5

@DanielRoseman如果丹尼尔不使用cbv,我现在停止担心不知道和不使用cbv .. – doniyor 2014-08-26 16:24:58

回答

55

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

此外,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 

现在你的模板将通过本书的对象的集合呈现扩展它。

一个不错的地方,从这开始有一个很好的阅读docs

更新

ccbv.co.uk具有全面的和易于使用的约你已经提供给您基于类视图的信息。

+15

在我的(有偏见的)意见,最好的地方开始在http://ccbv.co.uk/ :) – meshy 2013-02-14 09:24:47

+0

感谢指针@ meshy。 – GreenAsJade 2014-11-19 06:55:41

+2

@meshy cbv的域名,有人必须真的爱cbv! – NeoWang 2015-07-22 09:54:18

12

有些话从两勺

提示替代Apporach - 住在一起FBVs

有的开发商宁愿选择使用最多的浏览和CBVS FBVs的方只为需要的意见被分类。这个策略也很好。

8

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

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

除了通过提供不同的方法来做调度,检索模板,处理不同的请求类型,通过模板上下文变量,验证表格,以及更多的开箱多的传承CBVS。这些使代码模块化,因此可以维护。如果你想在你的Django应用程序中实现一个功能齐全的CRUD操作基于

1

类的观点是优秀的,同样需要一点时间&努力实现使用基于函数的观点。

当您不打算在您的网站/应用程序上实施任何CRUD时,我会建议您使用基于功能的视图意味着您的内容是简单地呈现模板。

我创建了一个简单的CRUD基于应用程序使用基于类的视图是现场直播。访问http://filtron.pythonanywhere.com/view/并享受。然后你会知道它的重要性。