2011-02-26 82 views
-1

我是一個django noob,剛過我的第一本django教程,現在正在考慮爲我的第一個「真實」項目設計。如何設計一個Django驅動的「cms hosting」類似解決方案?

我需要建立的項目在本質上與博客託管系統類似(think wordpress.com)。請注意,我實際上並不打算構建博客託管系統,而是要嵌入其他網站(類似於disqus,也許)的服務,並且會向我的主服務器請求內容。

我想用django構建CMS託管類行爲與博客託管系統類似,我認爲。內容將是純文本格式(json格式),所以從這個意義上說,它與簡單的博客文章非常相似,這些文章主要是文本。

設計應符合下列規定:

1)匿名用戶應該能夠註冊 3)註冊的用戶應該能夠創建一個或多個「博客」,並登錄到管理界面爲他的博客。 4)註冊用戶應該能夠在管理界面的任何「博客」上刪除內容 - 但僅限於他的博客 5)註冊用戶應該能夠邀請其他註冊/匿名用戶成爲聯合管理員他的博客 6)所有的博客都應該能夠從相同的django服務器(最好是同一個項目)運行,或者作爲獨立的django項目(對於需要內部部署安裝的客戶端)運行,並且這應該是相對的容易改變(當然手動,通過使用一些移植工具,而不是從網站本身的「單擊」解決方案,除非我錯誤地認爲這將是科幻小說......) 7)匿名用戶應該是能夠使用唯一的請求ID訪問來自任何「博客」(在同一部署中)的內容,該ID不一定包含「博客」標識。確定請求所屬的「博客」的內容將優選基於發起請求的域來完成。 8)應該能夠添加諸如內容版本管理(恢復,區分等),i18l支持等「花哨」功能。

當然,此外,該設計應該是可擴展的,並有助於緩存和失敗 - 但我認爲這些(使用memcache和多個數據庫)的最佳實踐在其他地方有很好的描述,超出了這個問題的範圍。

我已經閱讀過django的官方文檔,以及在Google上提供的很多教程和文章(以及本網站上的問題,這通常是我在這類搜索中的第一步),並提出了以下理論設計選項。我寫的理論是,我不知道哪一個是可能/可行的。此外,我正在尋找專家意見,因爲我很清楚,一個健全的設計是我的項目將要麼站立或跌倒的基礎......

零訂購選項- 使用一些現有的Django CMS解決方案如django-cms並在其上擴展。本能地,我不喜歡這個想法,並且我希望構建小型和擴展(在特性方面),另外我想爲我的特定目的和需求精簡一切。此外,我無法找到和顯而易見的方式使用現有的(和受歡迎的)django CMS解決方案來實現我所需要的「博客託管」。

第一個選項- 實現一些「博客」模型,並使用其中一個可用的行級認證應用程序管理授權。無論是從頭開始構建我的客戶端管理員,還是擴展「內置」管理員,使用適當的權限管理進行查看等等。在這個選項中,我的項目將由我的核心應用程序的單個實例組成,並帶有「幫助」應用程序處理具體任務。將特定客戶端的數據(即特定「博客」)遷移到獨立部署將需要查詢特定的博客ID並導出+從數據庫中刪除該博客的所有數據,然後將其導入新的獨立部署。這是我能想到的最直接的選擇。

第二個選項- 爲我的每個客戶都有一個單獨的項目。不知道如何做到這一點(儘管我已經看到有服務知道如何做到這一點,例如爲他們的客戶ep.io)。這似乎是一個很高的命令,並且造成了很多不必要的開銷。我相信這個選擇不是領先者。另外,在這個解決方案中,來自不同域的內容請求的過濾將不得不分別從那些django項目中完成,因爲我猜測某人需要將每個請求指向適當的項目。這可能可能是另一個「網關」項目,帶有「網關」應用程序。

第三個選項- 擁有多個我的核心應用程序實例(每個博客或一組用戶的博客集合),並有一些「網關」應用程序來處理登錄我的用戶和以某種方式路由到正確的應用程序實例。這個應用程序也可能會處理由發起域路由內容請求。我猜測這種設計應該使權限/認證變得簡單,因爲在應用程序中不需要任何設計。這也應該讓一個特定的博客更容易移植到獨立部署,因爲它已經與其他博客分開了。我還沒有設法找到如何在任何地方實現這一目標的指示,所以我不確定這是甚至可能的,但如果是這樣,在我看來,它可能更可取。

目前我的想法是,我希望能夠做到第三個選項,因爲它的固有的模塊,但只有懂得甚至開始做方案一...

想法,建議,訓誡?

感謝您的時間(如果您已閱讀了迄今爲止的J),我希望這可能對希望爲其客戶提供類似服務的其他人有用。

+0

downvotes沒有評論?這是很久以前寫的,但我仍然很感激來自某人的實際反饋意見,以便降低這個問題 – odedbd 2014-12-24 11:13:20

回答

0

我做了一些類似於我的CMS的插件(open haggis/open-haggis.org),我將從請求中挑選出主機名,然後從中選擇不同的數據庫。所以我可以運行CMS的同一個實例,但將數據分區到每個「客戶端」的單獨數據庫中,這使得數據安全性變得更加簡單。讓我知道你是否想要任何細節。

+0

一個很好的例子,Django可以從動態的,按請求的設置中受益。 – 2011-02-28 22:03:45

+0

您好fatgeekuk,我很想聽聽一些細節。 你是什麼意思「選擇不同的數據庫」?一個單獨的DB服務器?或者只是DB後端內的一個單獨的數據庫(我猜第二個,但想確認)。 你如何處理添加對新主機名的支持,創建新的數據庫等?手動完成嗎? 這聽起來很有趣, 謝謝! – odedbd 2011-03-01 08:50:05