2017-05-14 36 views
0

我已經開始研究一個新的大型項目 - 許多基於城市的網上商店,每個網站都在一個域的子域上工作,例如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文件粘在一起建立?

請給我一些關於上述項目最佳實踐的建議。對於這些「十字路口」式選項中的每一個應該是什麼樣的正確決策,你會推薦什麼?

回答

0

好吧,我會在一堆工作後回答我自己的問題。

根據我的項目需要,我決定將幾乎所有東西都集中在一個地方,不要以後再與同樣東西的很多版本混淆。 一個項目實例,一個數據庫,一個設置包,一個虛擬主機。

子域特定的數據存儲在數據庫中(鏈接到自定義寫入的域模型),如果是純文本數據b)或作爲文件保存到項目實例中的某個特定於子域​​的目錄樹,如果它是二進制數據(大部分圖像)。

設置包由基本設置文件和三個特定於環境的文件(開發,分段,製作)組成,這些文件從這一個基本文件導入所有內容。您必須選擇要使用的文件並將其重命名爲settings.py

相關問題