2012-04-12 9 views
0

Ich habe einen REST-ful-Service mit Django implementiert und für jede Ressource, auf die zugegriffen wird, möchte ich verwandte Daten zwischenspeichern, auf die wahrscheinlich zugegriffen wird.Pre-Cache-Django-REST-Ansichten

Zum Beispiel der Ressource http://www.example.com/publication/1280 würde die XML-Antwort geben:

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

Dann würde Ich mag Cache-Daten mit den Ressourcen http://www.example.com/user/1 und http://www.example.com/author/564 assoziiert vor.

Wie im Web-Service ist die Antwort eine Art Datenstruktur, ich denke, es ist besser, diese gesamte Antwort als das Queryset zu cachen. Wenn wir das Abfrage-Set zwischenspeichern würden, würden wir jedes Mal, wenn wir auf die Ressource zugreifen, Zeit im Template-Rendering verlieren.

Ist es ein guter Ansatz? Fehle ich etwas?

Wenn dieser Ansatz richtig ist, dann, wie könnte ich eine Ansicht mit der Middleware von django

'django.middleware.cache.UpdateCacheMiddleware'

und

'django.middleware.cache.FetchFromCacheMiddleware' bereitgestellt Pre-Cache?

Danke

Antwort

0

Django per-view cache versuchen.

Grundsätzlich verwendet es die URL (und einige andere Dinge) als Cache-Schlüssel, und wird wie folgt umgesetzt:

from django.views.decorators.cache import cache_page 

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

Dies wird die XML-Ausgabe der Ansicht cachen, die, wie Sie benötigen vermuten weniger Ressourcen abzurufen, während der Cache gültig ist, als nur das Abfrage-Set zwischenzuspeichern.

Die Cache-Middlewares django.middleware.cache.UpdateCacheMiddleware und django.middleware.cache.FetchFromCacheMiddleware Cache die gesamte Website, die höchstwahrscheinlich nicht was Sie wollen.