2012-04-12 1 views
0

У меня есть служба REST-ful, реализованная с помощью django, и для каждого доступного доступа ressource я хотел бы кэшировать связанные данные, к которым можно было бы получить доступ.Pre cache django REST views

для экземпляра Ressource http://www.example.com/publication/1280 бы дать ответ XML:

<publication xmlns="http://www.example.com" xmlns:atom="http://www.w3.org/2005/atom"> 
<abstract>None</abstract> 
<owner> 
    <atom:link rel="owner" type="application/xml" href="http://www.example.com/user/1">ckpuser</atom:link> 
</owner> 
<authors> 
<author> 
    <atom:link rel="author" type="application/xml" href="http://www.example.com/author/564">P. Almquist</atom:link> 
</author> 
</authors> 
<comments></comments> 
<tags></tags> 
<keywords></keywords> 
<referencematerials></referencematerials> 
<peerreviews></peerreviews> 
<fields> 
<howpublished>RFC 1349 (Proposed Standard)</howpublished> 
<url>http://www.ietf.org/rfc/rfc1349.txt</url> 
</fields> 
</publication> 

Тогда я хотел бы предварительно кэшировать данные, связанные с RESSOURCES http://www.example.com/user/1 и http://www.example.com/author/564.

Как и в веб-сервисе, данный ответ является своего рода структурой данных, я думаю, что лучше кэшировать весь этот ответ, чем запрос. Если мы будем кэшировать набор запросов, тогда мы теряем время при обработке шаблона каждый раз, когда мы обращаемся к ressource.

Это хороший подход? Я что-то упускаю ?

Если этот подход является правильным, тогда как я мог предварительно кэшировать представление с использованием промежуточного ПО, представленного Джанго

'django.middleware.cache.UpdateCacheMiddleware'

и

'django.middleware.cache.FetchFromCacheMiddleware'?

Спасибо

ответ

0

Попробуйте Джанго per-view cache.

В основном, он использует URL (и некоторые другие вещи) в качестве ключа кэша, и реализуется следующим образом:

from django.views.decorators.cache import cache_page 

@cache_page(60 * 15) # cache for 15 minutes 
def my_view(request): 
... 

Это будет кэшировать вывод XML из представления, которые, как вы подозреваете, потребуется меньше ресурсов для извлечения, пока кеш действителен, чем кеширование набора запросов.

Средство кэширования django.middleware.cache.UpdateCacheMiddleware и django.middleware.cache.FetchFromCacheMiddleware кэширует весь сайт, что, скорее всего, не то, что вы хотите.