Django--基于类的视图的 URL 缓存失败

Posted

技术标签:

【中文标题】Django--基于类的视图的 URL 缓存失败【英文标题】:Django--URL Caching Failing for Class Based Views 【发布时间】:2011-12-12 02:37:25 【问题描述】:

我在 Django Rest Framework 之上构建了一个 RESTful API。 API 的 URL 配置由基于类的视图组成。

我想缓存这些视图,但是,以下操作失败。关于为什么会这样以及如何改变它的任何想法?

   from django.views.decorators.cache import cache_page

   urlpatterns = patterns('',
   url(r'^dounces/?$', cache_page(60*60)(DounceListView.as_view(resource=DounceResource)), name='dounces_api'),

我安装了以下中间件。

'django.middleware.gzip.GZipMiddleware',
'django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.transaction.TransactionMiddleware',
'django.contrib.redirects.middleware.RedirectFallbackMiddleware',

对于本地测试,我使用的是默认缓存后端:

 'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',

【问题讨论】:

失败怎么办?出现错误,或者只是没有缓存页面? 无缓存。我添加了一个包含中间件的列表,以防我在那里遗漏了一些东西。 它是怎么失败的?你在运行 uwsgi 进程吗?如果是这样,那么如果您的页面在每个请求上生成不同的内容,那么每个进程都会有自己的缓存版本。 【参考方案1】:

我没有看到任何“django.middleware.cache.UpdateCacheMiddleware”和“django.middleware.cache.FetchFromCacheMiddleware”。我不认为没有它它可以正确缓存。

https://docs.djangoproject.com/en/2.2/topics/cache/

【讨论】:

请查看***.com/help/how-to-ask 了解如何提出有效的问题。【参考方案2】:

将你的 urlconf 更改为

urlpatterns = patterns('',
    url(r'^dounces/?$', cache_page(60*60)(DounceListView.as_view(resource=DounceResource)), name='dounces_api'),
)

另见https://docs.djangoproject.com/en/1.7/topics/cache/#specifying-per-view-cache-in-the-urlconf

【讨论】:

这个答案已经过时了。 Django 1.6 docs 表明装饰器应该用作cache_page(60*60)(MyView.as_view())【参考方案3】:

另一个答案已过时。正确的方法在这里详述:

https://docs.djangoproject.com/en/1.6/topics/cache/#specifying-per-view-cache-in-the-urlconf

现在必须这样做:

urlpatterns = patterns('',
    url(r'^dounces/?$', cache_page(60*60)(DounceListView.as_view(resource=DounceResource)), name='dounces_api'), 
)

【讨论】:

以上是关于Django--基于类的视图的 URL 缓存失败的主要内容,如果未能解决你的问题,请参考以下文章

Django后端开发学习笔记Django REST Framework基于类的视图

Django后端开发学习笔记Django REST Framework基于类的视图

将基于缓存 Django 类的视图响应与请求中的参数绑定

带有 url 问题的基于 Django 类的视图

带有参数的 Django 反向 url 到基于类的视图

基于 Django 类的视图的反向 url