django - 多个 Django 应用程序应如何相互通信?

标签 django django-models

其他发帖者之前曾在本论坛中说过,当您的 Django 应用程序开始变得庞大且难以管理时,您应该将其拆分为多个应用程序。我现在正处于那个阶段。允许这些应用程序之间进行通信的最佳实践是什么?

我的一个应用程序(我们称之为处理器)可以处理非常大的数据集。它每小时一次为其他应用程序生成少量新数据。这个其他应用程序(我们称之为 Presenter)向用户显示数据。

Processor应该如何将新数据交给Presenter?它是否应该简单地导入 Presenter 模型的部分内容,以便可以在 Presenter 的数据库中创建和保存记录?这对我来说似乎是紧密耦合的。还是应该通过调用Presenter中的函数来传递数据?或者将数据放入 Processor 和 Presenter 都知道的某种数据存储中?

大家一般都是怎么解决这个问题的?

/马丁

最佳答案

我肯定会选择在 Presenter 应用程序中导入处理器的模型。例如,您可以通过这种方式添加额外的用户信息:您有一个 UserPreferences 模型,其中 ForeignKeyFielddjango.contrib.auth.models.User.在两个应用程序之间这样做可能不会有什么不好的感觉,因为 django.contrib 是“标准库”,但尽管如此,它是直接耦合。

如果您的应用程序是耦合的,那么您的代码应该耦合以反射(reflect)这一点。这遵循显式优于隐式的想法,对吗?

但是,如果您正在设计一些更通用的东西(即您要为不同类型的处理器使用多个 Presenter 应用实例),您可以将特定模型存储为设置:

import processor_x.models
PRESENTER_PROCESSOR_MODELS = presenter_x.models

然后,在您的 Presenter 模型中:

from django.conf import settings
class Presenter:
    processor = models.ForeignKey(settings.PRESENTER_PROCESSOR_MODELS)

警告:我从未尝试过这样做,但我不记得设置仅限于字符串、元组或列表!

关于django - 多个 Django 应用程序应如何相互通信?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3771576/

相关文章:

python - 如何修改库的类以使其使用我对另一个库类的扩展?

python - Django:我可以在不过滤所有模型实例的情况下检查模型实例是否与过滤器匹配吗

django - 启用 auto_now_add 选项的 DateTimeField 是否必须在装置中具有值

python - 是否可以将日期时间列添加到多对多字段?

python - 在 django 中组织关系的最佳方式是什么?平坦的还是树状的?

python - 您无法添加没有默认值的 null=False 列

python - 在 Django 上的必需 selectDateWidget 上显示 empty_label

python - 如何在 Ubuntu 11.10 中安装 Django

django - 如何编写用于访问控制的 Django 模板标记?

python - 如何处理从一个模型字段到另一个模型字段的数据