为什么不使用静态方法进行CBV?

问题描述:

Pycharm暗示我让我的CBV方法变成静态的,我想“为什么不”。但是有一个原因,那就是没有完成,否则很多比我更聪明的人肯定会想到以前这样做。现在我试图理解为什么它没有完成。为什么不使用静态方法进行CBV?

我再次阅读文档中的教程,而唯一使用self的地方是引用对象方法,它们本身可能是静态的。所以我仍然没有看到他们不应该全部变成静态的任何理由。

http://www.django-rest-framework.org/tutorial/3-class-based-views/

我试图让他们在我的项目静态的,它似乎没有任何问题的工作。那么,有人请向我解释为什么这些方法不会像通常的做法那样是静态的? FBV是静态的,所以CBV应该很好地使用静态方法,对吧?

它们不是静态的,因为它更容易处理视图实例。通常当你编写静态方法时,你只是为了方便使用而将类的实例绑定到类/实例上。这个函数不知道实例本身。这仅仅是出于命名空间的目的。

但是在CBV数据如request,object等存储在self,以便它可以在任何实例方法中访问,而无需链通过它们通过所有方法调用。不要忘记,有很多用于处理表单,上下文,模板等的底层方法。您可能需要共享“实例上下文”,以便他们按照自己的意愿进行操作。

+0

如果我理解正确,这是句法糖,如果想要的话,它可以很好地静止,对吗?这是否也适用于Django Rest Framework视图?我仍然在寻找有效的使用案例,我只能找到一个模糊的例子,看起来像他们使用实例变量为了使用它们:https://docs.djangoproject.com/en/1.10/topics/class -based-views/intro /#handling-forms-with-class-based-views – dtgq

+0

@DavidTan你说什么语法糖? –