【问题标题】:Using Python Objects in Django Applications在 Django 应用程序中使用 Python 对象
【发布时间】:2014-11-11 23:06:15
【问题描述】:

如果这似乎是一个愚蠢的问题,我深表歉意,但我仍然是 Python/Django 程序员的新手。在 Django 应用程序中创建不是将保存在数据库中的模型的 Python 对象是否正常?

我正在创建一个相当大的 Django 应用程序,对我来说,我的代码真的开始“闻起来”了。我的意思是我的观点变得非常大,因为我采用的是过程而不是面向对象的方法。我的直觉告诉我,如果我使用更多具有自己属性和行为的对象,而不是在我的视图中将信息从一个函数传递到下一个函数,那么从长远来看,我的代码可能会更简单、更容易测试并且更健壮。

让我感到困惑的是,这些不是我想保存在数据库中的对象,所以我不太清楚我是否应该使用它们,如果我应该使用它们,我将把它们放在哪里。我提出的方法在 Django 应用程序中是典型的吗?如果是这样,相对于 Django 模型/视图/模板结构,我会将这些对象存储在哪里?另外,是否有任何流行的 Django 模块或库可以完成我所描述的我应该学习的内容?

提前感谢您的回复。

【问题讨论】:

  • 是的,这实际上是 Django 应用程序中的常见问题。使用不适合 models.py / views.py 的对象和类来建模您的业务逻辑并尽可能使用它们是一个非常好的主意。然后,您可以根据需要使用模型将内容保存到数据库中。

标签: python django oop


【解决方案1】:

您可以将对象存储在任何地方。您的视图文件或模型文件或任何地方都可能有辅助函数。我更喜欢将杂项函数放在utils.py 文件中,但这不是惯例,只是我最终要做的事情。我最终将大多数杂项辅助函数和基类放在 common 应用程序中,更具体地说是 common.utils 文件。

在一个项目中,我有很多应用程序,每个应用程序都有一个 api 客户端。客户端的基类位于名为common 的应用程序中。然后每个应用程序在client.py 文件中都有其特定的客户端

  • 项目
    • 常见
      • 客户
    • 应用程序1
      • 客户
    • 应用程序2
      • 客户

然后在 app1 客户端中

from project.common.client import BaseClient

class ConcreteApp1Client(BaseClient):
  pass

然后在我的视图或管理命令或模型中,或者任何可以正常导入和使用具体客户端的地方。 from project.app1.client import ConcreteApp1Client

【讨论】:

    【解决方案2】:

    如果您觉得某些变量最好封装在一个类中,Django 也有基于类的视图。

    https://docs.djangoproject.com/en/dev/topics/class-based-views/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-05
      • 1970-01-01
      • 1970-01-01
      • 2018-08-02
      • 2011-05-10
      • 2018-08-13
      相关资源
      最近更新 更多