python - Django 中的类 View

标签 python django views oop

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/

相关文章:

python - 无法使用 Anaconda python 3.6.1 打开 Jupyter 笔记本

python - 当mysql查询包含python中的占位符时如何搜索武术比赛?

python - 如何自动发送电子邮件作为提醒

python - 在 Django 模型中访问外部字段

python - from django.db import utils ImportError 无法导入名称 utils?

java - 仅在选定设备上的 Listview 上出现 Android Stackoverflow 错误

python - 在 __init__ 之外定义的实例属性 attribute_name

django - 如何防止 Django 管理员用户更改其他管理员用户的个人资料数据?

views - Laravel 5 View composer给我一个 undefined variable 错误

ruby-on-rails - 给定Rails 4上的用户角色,如何隐藏 View 的一部分