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

Mar*_*der 11 django django-models

其他海报之前曾在这个论坛中说过,当你的Django应用程序开始变得庞大且无法管理时,你应该把它分成几个应用程序.我现在就在这一点上.允许这些应用程序之间进行通信的最佳做法是什么?

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

处理器应如何将新数据传递给Presenter?它应该只是导入部分Presenter的模型,因此它可以在Presenter的数据库中创建和保存记录吗?这似乎与我的紧密联系.或者它应该通过调用Presenter中的函数来传递数据?或者将数据放在处理器和Presenter都知道的某种数据存储中?

你们通常如何解决这个问题?

/马丁

And*_*ron 5

我肯定会在Presenter应用程序中使用导入处理器的模型.例如,你可以添加额外的用户信息:你有一个UserPreferences带有ForeignKeyFieldto 的模型django.contrib.auth.models.User.你可能在两个应用程序之间没有那么糟糕的感觉,因为django.contrib它是"标准库",但是,它是直接耦合.

如果您的应用程序是耦合的,那么您的代码应该耦合以反映这一点.这遵循了明确优于隐含的观点,对吗?

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

import processor_x.models
PRESENTER_PROCESSOR_MODELS = presenter_x.models
Run Code Online (Sandbox Code Playgroud)

然后,在Presenter模型中:

from django.conf import settings
class Presenter:
    processor = models.ForeignKey(settings.PRESENTER_PROCESSOR_MODELS)
Run Code Online (Sandbox Code Playgroud)

警告:我从未尝试过这个,但我不记得设置的限制只是字符串,元组或列表!