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

cat*_*ine 52 django django-views

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

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

Aid*_*wen 63

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

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

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

或者您可以使用自定义功能扩展它

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
Run Code Online (Sandbox Code Playgroud)

现在,您的模板将传递一组书籍对象以进行渲染.

一个好的开始,这是一个很好的阅读文档.

更新

ccbv.co.uk提供了全面且易于使用的有关您已经可以使用的基于课程的视图的信息.

  • 在我的(有偏见的)意见中,最好的起点是http://ccbv.co.uk/ :) (16认同)
  • @meshy cbv的域名,有人必须真的爱cbv! (2认同)

小智 18

一些视图最好作为 CBV 实现,而其他视图最好作为 FBV 实现。

如果您不确定选择哪种方法,请参阅下表:

在此处输入图片说明


Grv*_*agi 14

两个词的一些词

提示替代Apporach - 与FBV保持联系

对于大多数视图而言,一些开发人员更倾向于使用FBV,而对于需要进行子类化的视图则更倾向于使用CBV.那个策略也很好.


ian*_*kit 11

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

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

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


hyg*_*ull 10

如果你想在你的 Django 应用程序中实现一个功能齐全的CRUD 操作,基于类的视图是非常好的,并且使用基于函数的视图实现同样需要很少的时间和精力。

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

我使用实时的基于类的视图创建了一个简单的基于CRUD的应用程序。访问http://filtron.pythonanywhere.com/view/(现在将/不会工作)并享受。然后你就会知道它的重要性。