2011-04-27 100 views
6

在我的一個項目中,我的用戶將擁有我的網站({username} .example.org)的專用部分。在那個子域中,我打算讓他們輕鬆地改變設計。 我看了一些已經這樣做的在線網站,如Tumblr,PosterousShopify允許用戶更改模板的最佳方式是什麼?

關於此應用程序的語言,我有Django的,這是我「的基礎上默認爲備用網址名稱模板渲染」(http://someuser.example.com將加載succeedly實施開始它模板/ someuser/*中的模板或者模板/ generic/*中的模板(如果未在第一個中找到)。 但是如果它們更適合我的需求,我可以將它導出到PHP或Play!Framework。

使用的模板引擎是Jinja2,因爲它是作爲Django的模板引擎一樣簡單,易學,安​​全(無Python的coode能(通常應該!)執行)。

以下是我找到的每個解決方案的優點/缺點。我真的很感激你的想法,你會怎麼做,爲什麼。謝謝。

注意:用戶將對HTML/CSS有很好的瞭解。

更改瓦爾(如標題顏色等)

  • 優點:

    1. 簡單&安全
  • 缺點:

    1. 太有限了,希望個性化自己的網站將無法使用此解決方案

這樣做只能上傳CSS

  • 優點的用戶:

    1. 易於整合
    2. 安全
  • 缺點:

    1. 有限公司
    2. 當用戶圖像存儲?(標誌,背景,一些梯度等)

允許用戶編輯模板(存儲在數據庫中)

  • 優點:

    1. 變化是更重要的
    2. 用戶幾乎可以自由地做他想做的事(實現GA,FeedBur NER等)
  • 缺點:

    1. 他們在哪裏把靜態文件(標誌,背景圖片,一些特殊效果(梯度))?
    2. 模板存儲在數據庫中,這需要對每個頁面多了一個SQL請求顯示

允許用戶編輯模板(存儲在文件中)

  • 優點:

    1. 變化更重要
    2. 用戶(幾乎)自由地做任何他想做的(實現GA,FeedBurner的等)
    3. 一個FTP訪問可以啓用,生根在他的模板目錄的用戶。
  • 缺點:

    1. 同樣的問題對於靜態文件

而且,當我卡是如何處理靜態文件(圖片,CSS js):我看不到如何在Apache(或NGinx)中定義一個VirtualHost,它會請求數據庫查看哪個用戶屬於這個URL。

感謝您的幫助,我很感謝!

+0

您必須非常小心地讓用戶自定義頁面佈局(使用原始HTML),因爲如果您希望稍後重新設計基本站點,最終可能會遇到支持頭痛的問題。 – 2011-04-27 07:32:48

+0

你好想過那個,這就是爲什麼我選擇了一個模板引擎(Jinja2,我更新了我的帖子)。那麼你建議做什麼?我需要讓他們改變整個設計以適應他們的需要,並且還要添加新的頁面(平坦的)。我有點卡住:/ – 2011-04-27 07:41:30

回答

4

好的,我會根據自己做的和我的研究來回答自己。

正如史蒂夫所說,你必須非常小心讓用戶自定義頁面佈局。

風險必須得到充分評估!

在我的情況下,讓用戶更改完整的HTML/CSS/JS是可能的,像PosterousTumblr那樣。

的風險是:

  • 用戶可以添加一個JavaScript代碼,將收集其他用戶的身份驗證的cookie。這樣做,該用戶可以訪問每個其他用戶的管理員部分的任何令牌認證。 一個簡單的解決方案是避免在管理部分和用戶網站之間交叉cookie。
  • 用戶可以嘗試在模板中執行代碼,如Python,PHP,Java,Ruby等(關於它的用途)。 這裏的解決方案是使用不允許完全使用代碼的模板引擎,只能使用標籤。用於python的Jinja2對此非常合適。

如果這兩個條件都很好評價,選擇「允許用戶編輯模板(存儲在數據庫中)」是一個很好的解決方案。

但是,如果你擔心太多命中數據庫可以有,最後的解決方案,又名「允許用戶編輯模板(存儲在文件中)」,可能是可能的,如果:

  • 您確保用戶不能訪問他可以訪問的模板目錄的其他文件夾。 你可以這樣做,例如設置一個使用數據庫進行用戶訪問的FTP服務器(如ProFTPd with MySQL),並在他的模板目錄中對用戶進行chroot。配額也是非常重要的設置,以避免您的用戶使用自己的模板目錄作爲STOCKAGE設備;)

嗯,我想我覆蓋了整個問題。有可能我錯過了一些觀點,如果是這樣的話,請添加評論或新帖子,我會完成答案。

相關問題