我已經開始研究一個新的大型項目 - 許多基於城市的網上商店,每個網站都在一個域的子域上工作,例如citydomain.webshop.com
。這些網站中約有40個開始同時運行。基於相同後端邏輯的多個站點的Django項目的最佳結構是什麼?
項目的後端業務邏輯和模板樣式在每個站點上都是相同的。一些靜態文件和數據庫數據在所有站點和特定站點(日誌,圖像,銷售物品,訂單等)中都是通用的。
我的問題是如何實現最佳可能的體系結構,以便某個用戶訪問不同子域上的相同URL將獲得由相同後端邏輯處理的子域的特定數據。
我認爲可能的架構以下選項:
1)Django項目實例:爲每個站點的所有站點或許多情況下,一個實例?
就DRY原理而言,第一種方式似乎比第二種方式合乎邏輯。我認爲,最好應該有一個項目實例與子域名爲每個站點的具體圖片,日誌的名字很多subfoolders等
2)數據庫:一是分貝爲每個站點的所有站點或多個數據庫?
由於DRY原理相同,我傾向於擁有ONE數據庫。大量的數據將在不同的特定於站點的數據庫中重複使用,並且它們之間的即時切換可能會很麻煩(根據文檔,數據庫路由器似乎是這裏的工具)。
只有一個數據庫,我應該使用sites framework
在各種表中存儲特定於站點的數據(據我所知,外鍵爲Site
模型)? 那麼應該如何根據當前的子域更改SITE_ID? 我應該使用: a)一些自定義中間件或 b)一些插件,如django-subdomains
,django-multisite
,Airavata
?
或者根本沒有用處sites framework
?
3)設置:在settings.py
文件(主之一,許多站點特定的那些店設置)或組合主要settings.py
文件只(也許內Site
表或另一個表存儲在數據庫中的特定站點選項會延長它)?
4)虛擬主機:一個僅用於主域或者每個站點有多個虛擬主機? 第二個選項可以用許多小型站點特定的settings.py
文件與其自己的SITE_ID(從一個主要的settings.py
繼承)與每個子域的許多站點特定的WSGI文件粘在一起建立?
請給我一些關於上述項目最佳實踐的建議。對於這些「十字路口」式選項中的每一個應該是什麼樣的正確決策,你會推薦什麼?