使用AJAX GET在缓存页面中生成CSRF保护表单

时间:2016-10-03 03:34:26

标签: ajax django forms

我的页面在数据库访问时使用时间过长,模板处理速度慢,因此我不得不使用django-cacheops使用Redis进行缓存。现在因为我有使用csrf标记的POST表单,所以这些值也将被缓存。我一直在考虑实施以下解决方案,但我不确定它是否是明智的。

  1. 为所有用户创建一个统一的缓存页面,无论是否已登录。
  2. 使用AJAX GET请求启动嵌入在缓存页面中的小脚本,以便在用户登录时加载表单。
  3. 这种方法安全且明智吗?如果是这样我怎么知道使用Javascript / jQuery和cookie我是一个登录用户(即如何区分客户端的用户和访问者,如服务器端的request.user.is_authenticated())?

1 个答案:

答案 0 :(得分:0)

作为第一种方法,您可以尝试仅缓存最重要的渲染页面部分(确保重型数据库查询在此之前保持惰性)。您的表单应该不在缓存部分中。

第二种方法是两阶段缓存:基本思想是你不首先根据cookie和/或用户渲染部件,缓存结果然后渲染先前排除的部分。这样,大多数页面和大多数加载都将位于缓存之后,您只会为每个请求呈现小部分。

有一个django-phased库,它实现了这种方法。但是不确定它是否适用于你以及它与缓存的效果如何。