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

时间:2013-02-09 12:33:05

标签: django django-views

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

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

5 个答案:

答案 0 :(得分:62)

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

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

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提供了有关您已经可以使用的基于课程的观点的全面且易于使用的信息。

答案 1 :(得分:13)

两个词的一些词

提示替代Apporach - 坚持使用FBV

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

答案 2 :(得分:11)

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

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

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

答案 3 :(得分:2)

如果您想在Django应用程序中实现功能齐全的 CRUD操作,那么基于类的视图非常出色,而且只需要很少的时间和时间。努力实现使用基于功能的视图。

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

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

答案 4 :(得分:0)

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

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

enter image description here