我最近实现了Django优秀的缓存框架.但是根据我的理解,Django不会缓存在get请求中传递参数的视图.我有一个Ajax视图,传递get参数,我想缓存X秒,这是一个简单的方法吗?
在psuedo代码中,我目前有一个URL:
http://mysites/ajaxthing/?user=foo&items=10
我想缓存任何这个url,只要它具有相同的get参数.
我目前在我的视图中使用缓存装饰器:
myview(stuff) myview = cache_page(myview, 60 * 3)
我确实读过关于django的各种标题,但它有点过头了,我甚至不确定它是否是正确的解决方案
是的,不同的标头不是正确的解决方案,当你想根据客户端请求标头(如用户代理等)进行缓存时使用它.
您需要使用低级API或模板片段缓存.这取决于你的观点.
使用低级API,它看起来像这样:
from django.core.cache import cache def get_user(request): user_id = request.GET.get("user_id") user = cache.get("user_id_%s"%user_id) if user is None: user = User.objects.get(pk=user_id) cache.set("user_id_%s"%user_id, user, 10*60) # 10 minutes ... .. .
是的,您可以使用django-view-cache-utils,这里是您的案例的代码:
from view_cache_utils import cache_page_with_prefix from django.utils.hashcompat import md5_constructor ... @cache_page_with_prefix(60*15, lambda request: md5_constructor(request.get_full_path()).hexdigest()) def my_view(request): ...