0

我正在 web.py、postgres 和 redis 之上建立一个网站。在我的应用程序的某些视图中,有一些特定于用户的信息。例如,如果用户登录,顶部栏上的链接将不同于非登录用户的视图或“欢迎 $username”之类的内容。我可以通过渲染每个页面来响应每个请求来实现它。除了用户特定的信息,一些视图的其他部分完全相同。所以我想缓存渲染的页面。我想出了一些实现方法,但我不知道该使用哪个,因为我有点自学Web开发,我想知道专业的Web开发人员如何处理这个问题。

这是我的方法:

  • 在页面到达用户浏览器后,将一些数据保存在 cookie 中并编写一段 javascript 脚本来操作 HTML DOM。这样,在我的应用程序的某些视图中,所有用户都获得完全相同的页面,但存储在 cookie 中的数据不同,然后使用 javascript 呈现的页面不同
  • 为每个用户渲染和缓存某些页面的每个版本,但我认为这不是一个好主意....
  • 渲染和缓存部分页面并在请求进入时构建页面。我正在使用 web.py 的 Templetor 来渲染页面。现在有一个基本的站点范围模板可以用作包装器。如果我使用这种构造方法,而不是使用基本模板,我可能必须渲染和连接页面的不同部分。然后为每个用户缓存适当的片段。

我应该怎么办?有更好的解决方案吗?对不起我糟糕的英语写作技巧:(希望它能表达我想问的问题。任何帮助将不胜感激并提前感谢!谢谢!:D

编辑:包含用户特定信息的代码是这样的

<nav>
  <div class="wrapper">
    <div class="primary">
      <ul class="nav">
        <li><span>Home</span></li>
        <li><span>About</span></li>
        <li><span>Contact</span></li>
      </ul>
    </div>

    <div class="secondary">
      $if session.logged_in:
          <span>Welcome, $session.username</span>
          <a href="/new">new post</a>
          <a href="/logout">logout</a>
      $else:
          <a href="/register">register</a>
          <a href="/login">login</a>
    </div>
  </div>
</nav>

我现在正在使用会话,这意味着我不能只为每个用户缓存一个版本。stackoverflow.com 如何实现这一点?当我未登录时,我看到顶部栏中的信息有所不同,并且确定我知道每个用户的视图都不同......

4

1 回答 1

0

事实证明,大多数网站只是缓存数据而不是最终的 html 文件。这更容易管理,实施起来也更灵活。虽然仍然需要在每个请求上渲染页面,但可以减少数据库的负载。对于未登录的用户,app可以选择缓存最终的html页面。我一直在考虑缓存最终的 html 文件。我真是个白痴……

于 2013-06-27T13:08:06.397 回答