静态文件——允许用户更改模板的最佳方式是什么?



在我的一个项目中,我的用户将有我的网站({username}.example.org)的专用部分。在该子领域中,我计划允许他们轻松更改设计。我看了看一些已经做到这一点的在线网站,比如Tumblr、Posterous和Shopify。

关于这个应用程序的语言,我从Django开始,我成功地实现了一个"基于url名的模板渲染,默认为回退" (http://someuser.example.com将加载templates/someuser/*或templates/generic/*中的模板,如果在第一个中没有找到)。但是我可以把它导出到PHP或者Play!框架,如果他们更适合我的需要。

使用的模板引擎是Jinja2,因为它和Django模板引擎一样简单,容易学习,而且安全(没有Python代码可以(通常应该)被执行)。

以下是我找到的每个解决方案的优缺点。我真的很感激你的想法,你会怎么做,为什么。谢谢。

注意:用户将有良好的HTML/CSS知识。

更改变量(如标题颜色等)

  • 优点:

    1. 简单,安全
  • 缺点:

    1. 限制太大,想要个性化网站的用户将无法使用此解决方案

只上传CSS

  • 优点:

    1. 易于集成
  • 缺点:

    1. 用户图像存储在哪里?(logo,背景,渐变等)

允许用户编辑模板(存储在数据库中)

  • 优点:

    1. 变化更重要
    2. 用户(几乎)可以自由地做任何他想做的事情(实现GA, FeedBurner等)
  • 缺点:

      他们把静态文件(logo,背景图像,一些特殊效果(梯度))放在哪里?
  • 模板存储在数据库中,每显示一个页面都需要一个SQL请求

允许用户编辑模板(存储在文件中)

  • 优点:

    1. 变化更重要
    2. 用户(几乎)可以自由地做任何他想做的事情(实现GA, FeedBurner等)
    3. 可以启用FTP访问,在用户的模板目录中生根。
  • 缺点:

    1. 静态文件
    2. 同样的问题

另外,我卡住的地方是关于如何处理静态文件(图像,css, js):我看不出如何在Apache(或NGinx)中定义一个VirtualHost,它会请求数据库查看哪些用户属于这个url。

谢谢你的帮助,我很感激!

好的,我会根据我所做的和我的研究来回答我自己。

正如Steve提到的,你必须非常小心让用户自定义页面布局。

风险一定要评估好!

在我的情况下,让用户改变完整的HTML/CSS/JS是可能的,在某种程度上,像Posterous或Tumblr。

风险如下:

  • 用户可以添加javascript代码来收集其他用户的auth cookie。这样,该用户就可以访问其他用户的管理部分的任何令牌认证。一个简单的解决方案是避免管理部分和用户网站之间的交叉cookie。
  • 用户可以尝试在模板中执行代码,如Python, PHP, Java, Ruby等(关于它的用途)。这里的解决方案是使用一个模板引擎,它完全禁止使用代码,只允许使用标签。Jinja2 for python是完美的选择。

如果这两个条件得到了很好的评估,选项"允许用户编辑模板(存储在数据库中)"是一个很好的解决方案。

但是如果你担心数据库可能有太多的点击,最后一个解决方案,又名"允许用户编辑模板(存储在文件中)",可能是可能的,如果:

  • 确保用户不能访问他可以访问的模板目录的其他文件夹。您可以这样做,比如设置一个FTP服务器,使用数据库进行用户访问(如MySQL的ProFTPd),并在用户的模板目录中chroot用户。设置配额也非常重要,以避免用户使用他的模板目录作为存储设备;)
嗯,我想我把整个问题都解决了。我可能漏掉了一些要点,如果是这样的话,请添加评论或新帖子,我将完成答案。

相关内容

  • 没有找到相关文章

最新更新