2016-12-05 77 views
2

在django中,大多數多租戶實現(模塊)將主機映射到視圖上。多租戶django應用程序使用URL映射而不是域映射

例如映射主機/ URL - > Django的視圖中使用postgress架構的:

customer1.myapp.com/view1/arg1 -> myapp.view1(arg1) using schema 'customer1' 
customer2.myapp.com/view1/arg1 -> myapp.view1(arg1) using schema 'customer2' 
customer3.myapp.com/view1/arg1 -> myapp.view1(arg1) using schema 'customer3' 

由於我的PaaS(Pythonanywhere)是不支持通配符域(* .myapp.com),我試圖建立使用多租戶應用URL映射:

eg映射URL - > django的視圖:

myapp.com/customer1/view1/arg1 -> myapp.view1(arg1) passing implicit parameter tenant='customer1' 
myapp.com/customer2/view1/arg1 -> myapp.view1(arg1) passing implicit parameter tenant='customer2' 
myapp.com/customer3/view1/arg1 -> myapp.view1(arg1) passing implicit parameter tenant='customer3' 

這裏一些中間件應採取租戶參數傳遞到視圖和過濾查詢結果適用於所選對象承租人的護理。 例如https://django-tenant-schemas.readthedocs.io/en/latest/

但這裏的問題是:如何做到這一點 - 哪些包可以處理這個 - 用於URL映射而不是主機映射?

注:Django的multitenants提到「支持的URL模式以及子域」,但尚不清楚如何做到這一點? https://pypi.python.org/pypi/django-multitenants

回答

0

從位django-multitenants閒逛的,它看起來像它的這意味着支持基於URL的多租戶使用稱爲TENANT_BASE_PATH

但是,如果您search the codebase of the project on GitHub,該設置的唯一引用出現在文檔中,而不是代碼本身。因此,django-multitenants可能不是一個完成的項目,而是一個可能已被放棄的工作進程(最後一次提交僅僅是最初提交後的14天)。

1

以下列方式與很大的幫助解決了從Pythonanywhere支持:

  1. 創建爲每個租戶一個新的Web應用程序(是的,這是耗資2 $ /月)
  2. 地圖的新領域新的Web應用程序(檢查pythonanywhere網絡選項卡「DNS設置」)
  3. 讓每個Web應用程序使用相同的代碼和相同的Postgres數據庫(複製靜態&媒體patsh & WSGI腳本)
  4. 在Postgres裏創建新的模式DB
  5. 剩下的就是簡單:遵循django-tenant-schemas

大致文檔:

  • 同步的新模式:./manage.py migrate_schemas --schema =我的新租戶
  • 將新租戶添加到公共租戶「customers_client」表
  • 如果您的用戶模型不在公共表中:./manage.py createsuperuser --schema = my-new-tenant