在我的一个项目中,我的用户将有我的网站({username}.example.org)的专用部分。在该子领域中,我计划允许他们轻松更改设计。我看了看一些已经做到这一点的在线网站,比如Tumblr、Posterous和Shopify。
关于这个应用程序的语言,我从Django开始,我成功地实现了一个"基于url名的模板渲染,默认为回退" (http://someuser.example.com将加载templates/someuser/*或templates/generic/*中的模板,如果在第一个中没有找到)。但是我可以把它导出到PHP或者Play!框架,如果他们更适合我的需要。
使用的模板引擎是Jinja2,因为它和Django模板引擎一样简单,容易学习,而且安全(没有Python代码可以(通常应该)被执行)。
以下是我找到的每个解决方案的优缺点。我真的很感激你的想法,你会怎么做,为什么。谢谢。
注意:用户将有良好的HTML/CSS知识。
更改变量(如标题颜色等)
-
优点:
- 简单,安全
-
缺点:
- 限制太大,想要个性化网站的用户将无法使用此解决方案
只上传CSS
-
优点:
- 易于集成
-
缺点:
- 用户图像存储在哪里?(logo,背景,渐变等)
允许用户编辑模板(存储在数据库中)
-
优点:
- 变化更重要
- 用户(几乎)可以自由地做任何他想做的事情(实现GA, FeedBurner等)
-
缺点:
- 他们把静态文件(logo,背景图像,一些特殊效果(梯度))放在哪里?
- 模板存储在数据库中,每显示一个页面都需要一个SQL请求
允许用户编辑模板(存储在文件中)
-
优点:
- 变化更重要
- 用户(几乎)可以自由地做任何他想做的事情(实现GA, FeedBurner等)
- 可以启用FTP访问,在用户的模板目录中生根。
-
缺点:
- 静态文件 同样的问题
另外,我卡住的地方是关于如何处理静态文件(图像,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用户。设置配额也非常重要,以避免用户使用他的模板目录作为存储设备;)