一尘不染

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

django

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

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


阅读 609

收藏
2020-04-03

共1个答案

一尘不染

最显着的优势是继承。在大型项目中,你可能会有很多相似的视图。不必一次又一次地编写相同的代码,只需让视图从基本视图继承即可。

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

现在,你的模板将传递一个书本对象集合以进行渲染。

2020-04-03