Django:项目使用来自 REST API 的数据,如何在这个系统中使用外部应用程序?

Posted

技术标签:

【中文标题】Django:项目使用来自 REST API 的数据,如何在这个系统中使用外部应用程序?【英文标题】:Django : Project consuming data from REST API, How to use external apps in this system? 【发布时间】:2012-03-04 13:47:45 【问题描述】:

我有一个 Django Web 前端,它使用来自 REST API 后端的数据。 甚至用户也是在后端创建和创建的。

我的问题:

如何在此系统中使用严重依赖 django models/ORM 的 3rd 方应用? 有什么东西可以在 REST API 资源和 ORM 之间架起一座桥梁吗?

如何解决这个问题?

更新

DRY 主体在这种情况下似乎失败了。

【问题讨论】:

对于它的价值,我不知道这样做有什么好的(甚至不是那么好)的方式。 让我们看看,如果我们能找到可以为这种情况提供解决方案的人。 是的,如果有解决方案,我会很感兴趣。 【参考方案1】:

自从这个问题最初发布以来,情况可能已经发生了变化。现在 *** 上有几个关于这个主题的有趣的相关问题。

要按照in this answer 的说明编写解决方案,您可以创建一个外部服务层(又名services.py)并在那里编写访问外部资源的逻辑。您的视图将消耗这一层,并做出适当的行动。还有其他问题可以帮助您将 django-view 收到的原始请求中的信息传递给外部服务,例如 this 或 this

还有一个 django 应用程序将这种情况考虑在内,如 in this answer 所述。 django-roa 使用 Resource Oriented Architecture 范式来解决这个问题。

【讨论】:

【参考方案2】:

我在一个新的电子商务项目中遇到了类似的障碍。 该项目是一个成熟的商店管理软件(CMS+ERP+CRM)的前端。它需要使用主产品数据库,但有自己的产品评论、评级等条目。

最初的想法是制作主数据库的缓存副本。该网站将受益于缓存项目的快速加载时间,但实施并非易事。

经过一些考虑,选择的方法是从管理程序更新网站的数据库。这样网站的副本永远是正确的,并且大部分实现不需要担心 REST 服务(它仍然会用于用户注册、发货跟踪等)

在您无法让服务远程更新您自己的数据库的情况下,您需要提出一种机制,允许您像常规模型一样引用 REST 资源,并将它们缓存在后台。

重要提示:研究确保缓存始终正确(非脏)的方法...

【讨论】:

是否有一些开源项目使用这样的解决方案?【参考方案3】:

我不确定我是否完全理解您的问题或要求。按照我的阅读方式,你有一个主要的后端,它基本上是一个黑盒,并且你想在你的项目中使用一些使用 Django ORM 的 3rd-party 应用程序。

我不清楚为什么需要能够在两个数据存储之间进行双向同步。您项目的用户将从您的主后端和项目的 ORM 中返回数据。

由于您担心在主后端保存“ORM”数据,也许您会考虑创建一个事务中间件,该中间件会在 ORM 数据更新时触发,它可以序列化正在保存的结构并将其传输到你的 REST API。我假设这个 REST API 能够接受任意数据结构?

您可能至少想要使用middleware 的一些 形式,并且可能需要一个实用模块/类来帮助形成“桥梁”。

【讨论】:

嗯.. 中间件在视图之前和之后起作用。但是数据库调用通常是在视图中进行的,那么中间件如何发挥作用呢? @YugalJindle,使用 TransactionMiddleware。也见docs.djangoproject.com/en/dev/topics/db/transactions。 有趣.. 我认为这很有帮助。您可以使用类似的桥接技术链接到项目吗? 但是.. 你能用这种技术链接到一个示例项目吗,因为我想这一定是一个标准问题。 你能再解释一下吗?

以上是关于Django:项目使用来自 REST API 的数据,如何在这个系统中使用外部应用程序?的主要内容,如果未能解决你的问题,请参考以下文章

无法在 React 中呈现来自 REST API GET(在 Django 中管理)响应的数据

Django REST Framework 结合来自不同应用程序的路由器

在 Django 中为来自客户端的请求和来自服务器的响应(REST API)压缩 JSON 有效负载。

Python / Django 中的 REST API

django-rest-framework- 使用“或”过滤来自一个 url 参数的多个值

来自 django rest 框架的 JSON