当前位置:  开发笔记 > 编程语言 > 正文

缓存具有URL参数的django视图

如何解决《缓存具有URL参数的django视图》经验,为你挑选了2个好方法。

我最近实现了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的各种标题,但它有点过头了,我甚至不确定它是否是正确的解决方案



1> Seb..:

是的,不同的标头不是正确的解决方案,当你想根据客户端请求标头(如用户代理等)进行缓存时使用它.

您需要使用低级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
    ...
    ..
    .



2> Roman Dolgiy..:

是的,您可以使用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):
    ...


这种方法很好,但我们遇到了代码的两个主要问题,1.对于具有相同URL参数的两个视图可能存在冲突,2.str(request.GET)可能以不同方式返回,因为字典条目显示没有指定的顺序.我后来使用了这段代码:@cache_page_with_prefix(60*15,lambda request:md5_constructor(request.build_absolute_uri()).hexdigest()).
推荐阅读
mobiledu2402852413
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有