Django:项目如何在系统中使用外部应用?

8 投票
3 回答
2245 浏览
提问于 2025-04-17 12:56

我有一个Django的网页前端,它从一个REST API的后端获取数据。用户也是在后端创建和管理的。

我的问题:

  • 我该如何在这个系统中使用一些第三方应用,这些应用非常依赖于Django的模型/ORM
  • 有没有什么方法可以在REST API资源和ORM之间架起一座桥梁?

这个问题该怎么解决呢?

更新

DRY原则在这种情况下似乎不太管用了。

3 个回答

-2

我在一个新的电商项目中遇到了类似的问题。这个项目是一个完整的商店管理软件的前端(包括内容管理系统、企业资源规划和客户关系管理)。它需要使用主产品数据库,但还需要有自己的产品评论、评分等条目。

最初的想法是制作一个主数据库的缓存副本。这样网站在加载这些缓存的内容时会很快,但实现起来并不简单。

经过一些考虑,我们选择的方案是从管理程序更新网站的数据库。这样一来,网站上的数据总是准确的,而且大部分实现不需要担心REST服务(不过仍然会用于用户注册、货物追踪等功能)。

在你的情况下,如果不能让服务远程更新你自己的数据库,你需要想出一种机制,让你可以像使用普通模型一样引用REST资源,并在后台进行缓存。

重要提示:要研究一种方法,确保缓存始终是正确的(不脏)……

0

可能自从这个问题最初被提出来后,情况已经发生了变化。现在在StackOverflow上有几个关于这个话题的有趣相关问题。

如果你想自己动手写个解决方案,可以参考这个回答,你可以创建一个外部服务层(也就是 services.py),在里面写访问外部资源的逻辑。你的视图会使用这个服务层,并进行相应的操作。还有其他问题提供了如何将从django视图接收到的原始请求信息传递给外部服务的帮助,比如这个这个

还有一个django应用考虑到了这种情况,详细说明可以参考这个回答django-roa使用了面向资源的架构来解决这个问题。

-3

我不太确定我完全理解你的问题或者需求。根据我的理解,你有一个主要的后端,这个后端基本上是一个黑箱子,你想在你的项目中使用一些第三方应用,这些应用使用的是Django的ORM。

我不太明白为什么需要在这两个数据存储之间进行双向同步。你的项目用户会从你的主要后端和项目的ORM中获取数据。

既然你担心在主要后端保存“ORM”数据,也许你可以考虑创建一个事务中间件,每当ORM数据更新时就会触发,这样可以将要保存的结构序列化,并传输到你的REST API。我想这个REST API应该能够接受任意的数据结构吧?

你可能至少想使用某种形式的中间件,也许还需要一个工具模块或类来帮助搭建“桥梁”。

撰写回答