Django view 指向一个功能,如果您只想更改一点功能,这可能是一个问题。是的,我可以在函数中有数百万个关键字参数,甚至更多 if 语句,但我更多的是考虑面向对象的方法。
例如,我有一个显示用户的页面。此页面与显示组的页面非常相似,但与仅使用另一个数据模型相比仍然不太相似。组也有成员等...
一种方法是将 View 指向类方法,然后扩展该类。有没有人尝试过这种方法或有任何其他想法?
最佳答案
我创建并使用了我自己的通用 View 类,定义了 __call__
以便类的实例是可调用的。我很喜欢;虽然 Django 的通用 View 允许通过关键字参数进行一些自定义,但 OO 通用 View (如果它们的行为被分成许多单独的方法)可以通过子类化进行更细粒度的自定义,这让我少重复自己。 (每当我需要调整 Django 的通用 View 所不允许的东西时,我都厌倦了重写相同的创建/更新 View 逻辑。
我在 djangosnippets.org 上发布了一些代码.
我看到的唯一真正的缺点是内部方法调用的激增,这可能会在一定程度上影响性能。我认为这不是什么大问题。 Python 代码执行很少会成为 Web 应用程序的性能瓶颈。
更新:Django 自己的 generic views现在是基于类的。
更新:FWIW,自从编写此答案以来,我已经改变了对基于类的 View 的看法。在几个项目中广泛使用它们之后,我觉得它们往往会导致编写令人满意的 DRY 代码,但以后很难阅读和维护,因为功能分布在许多不同的地方,并且子类是如此依赖关于父类(super class)和混入的每个实现细节。我现在觉得TemplateResponse而 View 装饰器是分解 View 代码的更好解决方案。
关于python - Django 中的类 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/742/