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

Pro*_*e85 8 python django

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

根据Django的文档:

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

这似乎与蟒蛇禅相矛盾'只有一种方法可以做到'

那么,哪种方式更好?

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

  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

    这导致了许多残酷的样板代码

您是否看到其他任何方式,或者有人知道观点的去向?

Mat*_*att 4

这是一个见仁见智的问题,我个人在这一点上不同意卢克·普兰特的观点,但我已经爱上了Class Based Views。我认为 Django 社区对热切采用它们的抵制很大程度上源于这样一个事实:他们无法轻松了解它们是如何工作的(该实现使用了大量 Mixins 并且可能很难遵循)并且缺乏文档,我认为对于通用CBV 和普通 CBV存在很多误解。(很长一段时间,当你用 Google 搜索\xe2\x80\x9cdjango 基于类的视图\xe2\x80\x9d时,第一个结果都是关于通用视图)

\n\n

现在,文档变得越来越好,并且可用于帮助理解它们的工具也很棒(请参阅ccbv.co.ukpudb)。

\n\n

我建议学习和使用的Class Based Views原因与人们建议 OOP 的原因相同,它减少了代码重复并增加了代码重用(继承、混合)\xe2\x80\xa6 换句话说,它是 DRY。

\n\n

另一件事是,值得检查一下其他项目如何使用CBV's\xe2\x80\xa6 我最近最喜欢的项目之一是django-oscar,它使用它们取得了良好的效果。

\n