簡體   English   中英

Python/Django 多租戶解決方案

[英]Python / Django multi-tenancy solution

我可以利用一些幫助為我正在從事的項目制定攻擊計划。

想象一下,該站點是為一個負責監督分布在世界各地的區域銷售辦事處的小組所用。 該項目的目的是讓超級用戶快速創建特定於每個辦公室的新子站點——站點是頻繁添加的。 辦公室子站點應該完全包含特定於該子站點的“管理員”用戶,並且應該是用戶友好的 CMS。 超級用戶應該能夠介入並管理所有這些辦公室子站點。

除了獨立的辦公室子站點實例之外,每個子站點還需要管理聯系人、線索等,並將其存儲在一個中央區域供超級用戶使用。

我已經使用 Django 完成了一些網站,但從來沒有做過多租戶網站。 我想要使​​用的技術或可能有用的教程/文檔的建議。

要求:

  1. 每個子站點使用相同的源(模板、JS、可用功能等),但可以修改以反映模板中的自定義內容。
  2. 每個子站點分配的子域(可以選擇使用完全限定域),在項目中配置,而不是在硬編碼設置文件中。
  3. 子站點特定用戶訪問控制,以及可以訪問所有子站點的超級用戶。
  4. 為每個子站點提供“獨立”CMS 的能力。 即,子站點管理員只能看到他們的內容。 我對這個項目的偏好是 django-cms,但我願意接受建議。
  5. 支持從所有子站點匯集數據的應用程序,但將子站點“管理員”限制為只能在該應用程序中查看他們的記錄。

考慮到上述情況,您會推薦什么方法? 我願意重新考慮技術,但我想堅持使用 Python。

有一個很棒的應用程序叫做django-tenant-schemas ,它使用 PostgreSQL 模式機制來創建多租戶。

你得到的是指定SHARED_APPS包含跨所有模式(子站點)共享的對象,和TENANT_APPS包含特定於子站點的對象,即用戶、記錄等。模式彼此完全隔離。

每個 PostgreSQL 模式都綁定到一個域 url,以便中間件檢查請求的HOST部分並將數據庫連接的模式設置為適當的模式。

此外,它還允許您定義一個PUBLIC_SCHEMA_URLCONF ,它允許您為公共架構指定 urlconf 文件 - 不綁定到任何子站點的元站點。

抱歉,我的回答是快速而骯臟的,我只是分享我為實現多租戶所做的工作:

上面的兩個庫在組合時能夠為多租戶且靈活的 django 實例提供服務。 我在這里的意思是靈活是:您可以定義任何模型,無論是“租戶”還是“全局”。 因此,您可以擁有一個包含全球用戶但每個租戶產品目錄或每個租戶 + 產品的站點。 從我嘗試過的許多 django 應用程序中,這是實現多租戶的最靈活的方式

基於 Django 的 CMS Mezzanine有多租戶支持

除了我認為的子站點用戶控件之外,它具有您要求的大部分功能。 管理員頁面可以為管理員用戶按站點分隔,但普通用戶不能。

但是,如果您不需要 CMS,這對於您的用例來說可能是一種矯枉過正,但我​​想在這里提及它的完整性。

我一直在嘗試將django-tenants與 Wagtail 一起使用一段時間,但這種組合效果不佳,或者讓我說,盡管進行了很多嘗試,但我還是無法讓 wagtail 管理頁面正常工作。 我想會嘗試切換到我更廣泛使用的 django-tenant-schemas

注意:現在不維護 django-tenant-schema。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM