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

时间:2011-10-20 20:21:13

标签: django caching view django-views django-urls

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

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

   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',

3 个答案:

答案 0 :(得分:4)

将您的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

答案 1 :(得分:2)

另一个答案是过时的。这里详细说明了正确的方法:

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'), 
)

答案 2 :(得分:-1)

我没有看到任何“ django.middleware.cache.UpdateCacheMiddleware”和“ django.middleware.cache.FetchFromCacheMiddleware”。如果没有它,我认为它无法正确缓存。

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