0

我在我的 django 项目中使用 memcached 进行缓存,我有这样的视图

def questions(request):
    # code to fetch all questions

该函数除了从数据库返回一个问题列表之外什么都不做,但是对于它呈现结果的页面有一个标题,我在其中显示 request.user 名称。

如果我直接使用@cache_page装饰器,那么请求对象也会被缓存,并且request.user该页面上的也会从缓存中获取。结果,当我进入问题页面时,我看到了其他人的名字。

有没有一种方法可以防止请求对象被缓存,使用装饰器。一种方法是使用低级 api 并缓存我想要缓存的查询集,但是是否可以编写一个不会缓存与请求对象相关的任何内容的装饰器?

我希望我的问题很清楚。

4

1 回答 1

3

考虑为您的页面修改模板,以便您可以根据用户缓存一个块

{% load cache %}
{% cache 500 sidebar request.user.username %}
    .. sidebar for logged in user ..
{% endcache %}

其他块对所有用户都是相同的

{% cache 500 questions %}
    .. questions list ..
{% endcache %}

看看Django 模板片段缓存文档

于 2012-12-10T12:27:10.133 回答