【问题标题】:How do I get two different Django projects to communicate?如何让两个不同的 Django 项目进行通信?
【发布时间】:2016-07-18 11:53:56
【问题描述】:

正如标题所说,我有两个 Django 项目。与其他 SO 问题不同,这些是完全不同的项目,这意味着它们不共享数据库、托管环境、域名等。这是我想要和需要的,项目之间完全解耦。

但是,他们有来自我在两个项目中都需要的一个应用程序的某些模型(比方说 UserProfile)。另外,我希望只有一个项目允许登录、登录、忘记/重置密码功能。

我的想法是为它们都提供 RESTful API,但我仍然对如何正确实现这一点有一些疑问:

  • 如何处理重复的模型以使其保持同步?我是否创建可由其他项目修改的端点?
  • 如何进行单点登录?我需要专门的服务器吗?我还想利用 Django 提供的工具,例如让当前用户访问我的请求对象。

我还没有找到一个好的教程或一些关于如何实现所有这些的详细解释,所以如果有人有任何资源,请告诉我。

如果我的问题不够清楚,请在评论中告诉我。

谢谢。

【问题讨论】:

  • 您需要模型立即、实时同步,还是可以接受一些延迟?
  • 延迟是可以接受的,只要有一段不太长的时间(几分钟)可以说它们高度确定地同步。

标签: django rest django-rest-framework


【解决方案1】:

首先,如果您在两者中都需要 UserProfile 模型,并且您不共享数据库,那么您将在数据库中放入冗余数据,即数据库 d1 和 d2 中的相同数据。

我能想到的唯一可能的解决方案是让两个单独的数据库 d1 和 d2 都可以访问。这样,即使使用 app1 在 d1 中发生了变化,您也可以在 app2 中检测到这些变化,因此 app1 也可以检测到 d2 的变化。

这样,当您的用户登录 app1 时,d1 中会发生更改,这也会被 app2 读取,因此 app2 不需要单独进行用户身份验证。

看到这个 -> https://docs.djangoproject.com/en/1.9/topics/db/multi-db/

还有这个 -> Can I have two django projects sharing the same authentication model?

【讨论】:

  • 嘿,谢谢你的回答,但也许我不够清楚。我想要完全解耦,所以不允许一个项目读取另一个项目的数据库:(冗余确实是要走的路,但我想在 API 级别解决一致性问题,而不是在数据库级别。我需要这个抽象来重用我的任何项目。
  • “重用”是什么意思?你能举一个你会重用项目的例子吗?
  • 例如,如果我需要更换其中一个项目,那么项目A不再使用项目B的API进行通信,而是一个新项目-项目C比方说,它是这样写的用另一种语言。
  • 我不清楚您的目标是什么以及为什么需要数据冗余。如果您曾经需要替换一个项目并用另一种语言重写,那么一个单一的数据库解决方案就可以解决这个问题。但是,如果您愿意,您始终可以编写后台脚本来保持数据库同步。您可以让模型跟踪其更改,以便您仅同步最新更新。会有一些延迟,但这听起来你可以接受。我对 sso 不太熟悉,但我可以帮助解决任何数据同步问题,如果您有任何问题,请随时发表评论。
猜你喜欢
  • 1970-01-01
  • 2016-03-27
  • 2011-05-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多