django-rest-framework/docs/api-guide/caching.md
Jon Dufresne f9c67f04d4 Clean up all whitespace throughout project (#5578)
* Remove trailing whitespace from lines
* Remove trailing nad leading whitespace from files

Allows for cleaner diffs in future changes. For editors that
automatically clean up whitespace on save, will avoid unrelated line
changes in diffs.
2017-11-09 20:57:53 +01:00

1.7 KiB

Caching

A certain woman had a very sharp conciousness but almost no memory ... She remembered enough to work, and she worked hard.

  • Lydia Davis

Caching in REST Framework works well with the cache utilities provided in Django.


Using cache with apiview and viewsets

Django provides a method_decorator to use decorators with class based views. This can be used with with other cache decorators such as cache_page and vary_on_cookie.

from rest_framework.response import Response
from rest_framework.views import APIView
from rest_framework import viewsets

class UserViewSet(viewsets.Viewset):

    # Cache requested url for each user for 2 hours
    @method_decorator(cache_page(60*60*2))
    @method_decorator(vary_on_cookie)
    def list(self, request, format=None):
        content = {
            'user_feed': request.user.get_user_feed()
        }
        return Response(content)

class PostView(APIView):

    # Cache page for the requested url
    @method_decorator(cache_page(60*60*2))
    def get(self, request, format=None):
        content = {
            'title': 'Post title',
            'body': 'Post content'
        }
        return Response(content)

NOTE: The cache_page decorator only caches the GET and HEAD responses with status 200.