在一个新的Django项目中,我只是想知道是使用基于类的视图(CBV)还是基于函数的视图(FBV)。
基于类的视图提供了另一种将视图实现为Python对象而非函数的方法。它们不替换基于函数的视图,但与基于函数的视图相比具有一定的差异和优势
这似乎与python Zen相矛盾'只有一种方法可以做到'
那么,哪种方式更好?
到目前为止,我只看到三种可能性:
始终使用FBV
这意味着根本不使用通用视图(因为这些是基于类的,从1.5开始)
始终使用CBV:
确定请求处理订单时存在某些问题。参见
http://lukeplant.me.uk/blog/posts/djangos-cbvs-were-a-mistake/
我还认为构建整个类层次结构对性能不利。在那种情况下,我也会问自己,为什么FBV还没有被弃用?
根据
将通用CBV放入FBVhttps://gist.github.com/spookylukey/2596285
导致许多残酷的样板代码
您是否看到其他方式,或者有人知道观点的来源吗?
答案 0 :(得分:3)
这是一个意见问题,我个人不同意Luke Plant,我已经爱上了Class Based Views
。我认为Django社区很大程度上阻止他们急切地采用它们,因为他们无法轻易看到它们是如何工作的(实现使用了大量的Mixins并且很难遵循)而且文档缺乏,我认为对 通用 CBV和普通CBV存在很多误解。 (很长一段时间,当你用Google搜索“基于django类的视图”时,第一个结果是关于泛型视图)
现在文档变得更好了,可用于帮助理解文档的工具非常棒(请参阅ccbv.co.uk或pudb)。
我建议学习和使用Class Based Views
的原因与人们建议OOP相同,它会减少代码重复并增加代码重用(继承,mixins)......换句话说,它就是DRY。
还有一件事,值得查看其他项目如何使用CBV
...我最近的收藏之一是django-oscar,它使用它们效果很好。