【问题标题】:Using AJAX GET to generate CSRF protected forms in a cached page使用 AJAX GET 在缓存页面中生成受 CSRF 保护的表单
【发布时间】:2017-02-10 23:08:54
【问题描述】:

我的页面在数据库访问中使用了过多的时间并且模板处理速度很慢,因此我不得不使用使用 Redisdjango-cacheops 进行缓存。现在,由于我有使用 csrf 令牌的 POST 表单,因此这些值也将被缓存。我一直在考虑实施以下解决方案,但我仍然不确定它是否明智。

  1. 为所有用户(无论是否登录)获取一个没有任何表单的统一缓存页面。
  2. 如果用户已登录,则使用 AJAX GET 请求启动嵌入在缓存页面中的小脚本以加载表单。

这种方法安全且明智吗?如果是这样,我如何使用 Javascript/jQuery 和 cookie 知道我是登录用户(即如何区分客户端的用户和访问者,如服务器端的 request.user.is_authenticated())?

【问题讨论】:

    标签: ajax django forms


    【解决方案1】:

    作为第一种方法,您可以尝试仅缓存最繁重的页面以呈现部分(确保繁重的数据库查询在此之前保持惰性)。您的表单应远离缓存部分。

    第二种方法是两阶段缓存:基本思想是您不根据 cookie 和/或用户第一次渲染部分,缓存结果然后渲染之前排除的部分。这样一来,大部分页面和大部分负载都在缓存之后,您只会为每个请求渲染一小部分。

    有一个django-phased 库,它实现了这种方法。不过,不确定它是否适合您,以及它与 cacheops 的配合效果如何。

    【讨论】:

      猜你喜欢
      • 2013-02-13
      • 2017-01-01
      • 2017-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-25
      • 2020-01-15
      • 1970-01-01
      相关资源
      最近更新 更多