gpt4 book ai didi

templates - 允许用户更改模板的最佳方式是什么?

转载 作者:行者123 更新时间:2023-12-04 15:26:41 26 4
gpt4 key购买 nike

在我的一个项目中,我的用户将拥有我网站的专用部分 ({username}.example.org)。在那个子域中,我计划让他们轻松更改设计。
我查看了一些已经这样做的在线网站,例如 Tumblr , PosterousShopify .

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

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

这是我找到的每个解决方案的优缺点。我非常感谢您对此的想法以及您将采取哪种方式,为什么。谢谢。

注意:用户将对 HTML/CSS 有很好的了解。

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

  • 优点:
  • 简单安全
  • 缺点:
  • 太有限了,想要个性化他的网站的用户将无法使用此解决方案

  • 只上传 CSS
  • 优点:
  • 易于集成
  • 安全
  • 缺点:
  • 有限
  • 用户图像存储在哪里? (标志、背景、一些渐变等)

  • 允许用户编辑模板(存储在数据库中)
  • 优点:
  • 变化更重要
  • 用户(几乎)可以自由地做任何他想做的事(实现 GA、FeedBurner 等)
  • 缺点:
  • 他们将静态文件( Logo 、背景图像、一些特殊效果(渐变))放在哪里?
  • 模板存储在数据库中,每显示一个页面需要一个 SQL 请求

  • 允许用户编辑模板(存储在文件中)
  • 优点:
  • 变化更重要
  • 用户(几乎)可以自由地做任何他想做的事(实现 GA、FeedBurner 等)
  • 可以启用 FTP 访问,使用户在他的模板目录中生根。
  • 缺点:
  • 静态文件
  • 的相同问题

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

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

    最佳答案

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

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

    必须对风险进行充分评估!

    就我而言,让用户更改完整的 HTML/CSS/JS 是可能的,在某种程度上,例如 PosterousTumblr做。

    风险是:

  • 用户可以添加一个 javascript 代码来收集其他用户的身份验证 cookie。这样做,该用户可以访问每个其他用户的管理部分的任何 token 身份验证。一个简单的解决方案是避免管理部分和用户网站之间的交叉 cookie。
  • 用户可以尝试在模板中执行代码,例如 Python、PHP、Java、Ruby 等(关于它的用途)。这里的解决方案是使用完全禁止使用代码的模板引擎,只允许使用标签。 Jinja2对于 python 非常适合。

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

    但是,如果您担心数据库可能有太多的命中,最后一个解决方案,即“ 允许用户编辑模板(存储在文件中)”,可能是可能的,如果:
  • 您确保用户无法访问他可以访问的模板目录的其他文件夹。您可以通过设置使用数据库进行用户访问的 FTP 服务器(如使用 MySQL 的 ProFTPd)以及在他的模板目录中对用户进行 chroot 来执行此操作。设置配额也很重要,以避免您的用户使用他的模板目录作为存储设备;)

  • 好吧,我想我涵盖了整个问题。我可能会错过一些观点,如果是这种情况,请添加评论或新帖子,我会完成答案。

    关于templates - 允许用户更改模板的最佳方式是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5800328/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com