【问题标题】:Backend architecture for SaaS product in djangodjango 中 SaaS 产品的后端架构
【发布时间】:2017-01-25 08:00:04
【问题描述】:

我正在用 django 编写 SaaS 应用程序的后端。需要一些有关架构的指导。 因此,该产品将提供 2 种产品:一种是所有用户共享同一个数据库的通用产品,另一种是具有专用数据库的高级产品。我打算如何将其翻译成 django 如下:

  • 在 django 项目中,将有一个用于公开发行的应用程序。
  • 对于每个高级客户,都会有一个单独的应用程序。
  • 每个应用程序都有相同的模型。
  • 每个应用程序都与单独的数据库进行通信。使用:stackoverflow postdjango documentation 实现了这一点
  • 我将在项目的 views.py 中为所有 API 编写视图,而不是在任何应用程序中,并根据令牌决定与哪个应用程序的模型进行通信。

我现在看到的这个架构的问题:

  • 在所有视图中,一旦高级客户数量增加,我将不得不编写大量条件语句。
  • 新的高级客户的加入需要对代码进行大量更改。
  • models.py 中所有不同应用程序的代码重复。但这几乎类似于每次高级客户注册时编写用于在新数据库中创建表的语句。评论?

请就整个架构给我建议。在采用这种方式之前,我浏览了很多文章和堆栈溢出帖子,但没有一个是完全针对 django 的,所以我不是 100% 有信心。非常感谢。

【问题讨论】:

    标签: python django saas


    【解决方案1】:

    如果免费和高级产品的功能完全相同,则不需要任何代码重复。这当然是一个很大的 IF,因为您很可能会为高级产品添加额外的功能。

    如果功能完全相同,那么您只需将任何新的高级数据库添加到您的 settings.py 并使用中间件来确定您的模型应该与哪个数据库通信(使用 using 属性),对于共享数据库,在每个表中添加一个owner 列,记录该行的所有者是谁,以便您可以适当地过滤查询集。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-12-19
      • 1970-01-01
      • 1970-01-01
      • 2018-11-14
      • 1970-01-01
      • 2021-04-02
      • 1970-01-01
      • 2011-06-07
      相关资源
      最近更新 更多