2016-09-17 63 views
0

我正在爲django中的SaaS應用程序編寫後端。需要一些關於體系結構的指導。 因此,該產品將提供兩種產品:一種是所有用戶將共享同一個數據庫,另一種則使用專用數據庫。我打算如何將其翻譯成django如下:django中用於SaaS產品的後端架構

  • 在django項目中,將有一個應用程序用於整個產品。
  • 對於每個高級客戶端,都會有一個單獨的應用程序。
  • 每個應用程序都有相同的模型。
  • 每個應用程序都與一個單獨的數據庫通信。實現這個使用:stackoverflow postdjango documentation
  • 我會在項目的views.py中編寫所有API的視圖,而不是在任何應用程序內部,並根據令牌來決定哪些應用程序的模型要與之通信。

我現在看到的這種架構的問題:

  • 在所有的意見,我會寫很多曾經的高端客戶數量的增加條件語句。
  • 加入新的高級客戶端需要相當多的代碼更改。
  • 所有不同應用程序的models.py中的代碼重複。但是,每次優質客戶註冊時,它都會寫入用於在新數據庫中創建表的語句。註釋?

請告訴我整個建築。在採用這種方式之前,我經歷了大量文章和堆棧溢出帖子,但沒有一篇完全針對django,所以我不是100%自信。非常感謝提前。

回答

0

如果免費和高級產品的功能完全相同,則不需要任何代碼重複。這當然是一個很大的IF,因爲可以想象你會爲高級產品增加額外的功能。

如果功能完全相同,那麼您需要做的就是將所有新的高級數據庫添加到settings.py中,並使用中間件來確定模型應與哪個數據庫進行通信(使用using屬性),以及對於共享數據庫,將owner列添加到每個記錄該行的所有者是誰的表,以便您可以適當地過濾查詢集。