2011-04-27 105 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设备;)

嗯,我想我覆盖了整个问题。有可能我错过了一些观点,如果是这样的话,请添加评论或新帖子,我会完成答案。

相关问题