我通常在创建django应用程序时使用FBVs(基于函数的视图),因为它非常容易处理。但是大多数开发人员说最好使用CBVs(基于类的视图),仅在使用CBVs实现复杂视图会很麻烦时才使用FBVs。
为什么?使用CBV有什么优点呢?
我通常在创建django应用程序时使用FBVs(基于函数的视图),因为它非常容易处理。但是大多数开发人员说最好使用CBVs(基于类的视图),仅在使用CBVs实现复杂视图会很麻烦时才使用FBVs。
为什么?使用CBV有什么优点呢?
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
两个概念的比较:使用FBV和CBV
提示:另一种选择——坚持使用FBV
一些开发者倾向于在大多数情况下使用FBV,而仅在需要子类化视图时才使用CBV。这种策略也是可以的。
在我看不到真正扩展视图的机会的大多数情况下,我都使用FBV。如文档所述,如果以下两个特征适用于我的用例,我会考虑使用CBV。
- 与特定HTTP方法(GET、POST等)相关的代码组织可以通过单独的方法而不是条件分支来解决。
- 可以使用面向对象技术,如mixin(多重继承),将代码因素化为可重用组件。
基于函数的视图(FBVs)是:
基于类的视图(CBVs)是: