python教程—Django中的类视图-Python实用宝典

python教程—Django中的类视图

Django视图指向一个函数,如果您只想更改一点功能,那么这个函数就会出现问题。是的,我可以在函数中有上百万个关键字参数,甚至更多的if语句,但是我考虑的更多的是面向对象的方法。

例如,我有一个显示用户的页面。这个页面非常类似于显示组的页面,但它仍然不太像只使用另一个数据模型。集团也有成员等…

一种方法是将视图指向类方法,然后扩展该类。有人尝试过这种方法吗?

回答

我已经创建并使用了自己的通用视图类,定义了 _call__,这样类的实例就可以调用了。我真的很喜欢它;Django的泛型视图允许通过关键字参数进行一些定制,而OO泛型视图(如果它们的行为被分割成许多单独的方法)可以通过子类进行更细粒度的定制,这让我可以少重复很多。(每当我需要调整Django的通用视图不太允许的内容时,我就厌倦了重写相同的create/update视图逻辑)。

我在djangosnippets.org上发布了一些代码。

我看到的惟一真正的缺点是内部方法调用的增多,这可能会在一定程度上影响性能。我不认为这是个大问题;Python代码的执行很少会成为web应用程序中的性能瓶颈。

UPDATE: Django自己的通用视图现在是基于类的。

UPDATE > /strong>: FWIW,自从编写了这个答案以来,我已经改变了对基于类的视图的看法。后使用广泛的项目,我觉得他们往往导致令人满意的干写的代码,但难以阅读和维护之后,因为功能是分布在很多不同的地方,和子类依赖于每一个父类的实现细节和mixin。我现在觉得TemplateResponse and view decorators是分解视图代码的更好答案。

​Python实用宝典 (pythondict.com)
不只是一个宝典
欢迎关注公众号:Python实用宝典

本文由 Python实用宝典 作者:Python实用宝典 发表,其版权均为 Python实用宝典 所有,文章内容系作者个人观点,不代表 Python实用宝典 对观点赞同或支持。如需转载,请注明文章来源。
0

发表评论