在一个新的Django项目中,我应该使用基于类或基于函数的视图吗?

时间:2013-07-22 13:25:05

标签: python django

在一个新的Django项目中,我只是想知道是使用基于类的视图(CBV)还是基于函数的视图(FBV)。

根据Django's documentation

  

基于类的视图提供了另一种将视图实现为Python对象而非函数的方法。它们不替换基于函数的视图,但与基于函数的视图相比具有一定的差异和优势

这似乎与python Zen相矛盾'只有一种方法可以做到'

那么,哪种方式更好?

到目前为止,我只看到三种可能性:

  1. 始终使用FBV

    这意味着根本不使用通用视图(因为这些是基于类的,从1.5开始)

  2. 始终使用CBV:

    确定请求处理订单时存在某些问题。参见

    http://lukeplant.me.uk/blog/posts/djangos-cbvs-were-a-mistake/

    我还认为构建整个类层次结构对性能不利。在那种情况下,我也会问自己,为什么FBV还没有被弃用?

  3. 根据

    将通用CBV放入FBV

    https://gist.github.com/spookylukey/2596285

    导致许多残酷的样板代码

  4. 您是否看到其他方式,或者有人知道观点的来源吗?

1 个答案:

答案 0 :(得分:3)

这是一个意见问题,我个人不同意Luke Plant,我已经爱上了Class Based Views。我认为Django社区很大程度上阻止他们急切地采用它们,因为他们无法轻易看到它们是如何工作的(实现使用了大量的Mixins并且很难遵循)而且文档缺乏,我认为对 通用 CBV和普通CBV存在很多误解。 (很长一段时间,当你用Google搜索“基于django类的视图”时,第一个结果是关于泛型视图)

现在文档变得更好了,可用于帮助理解文档的工具非常棒(请参阅ccbv.co.ukpudb)。

我建议学习和使用Class Based Views的原因与人们建议OOP相同,它会减少代码重复并增加代码重用(继承,mixins)......换句话说,它就是DRY。

还有一件事,值得查看其他项目如何使用CBV ...我最近的收藏之一是django-oscar,它使用它们效果很好。