使用方法:
一、直接添加裝飾器@cache_response
該裝飾器裝飾的方法有兩個要求:sql
例子:數據庫
from rest_framework.response import Response from rest_framework import views from rest_framework_extensions.cache.decorators import ( cache_response ) from myapp.models import City class CityView(views.APIView): @cache_response() def get(self, request, *args, **kwargs): # values_list()從查詢集中只返回指定的字段 cities = City.objects.all().values_list('name', flat=True) return Response(cities)
若是您第一次請求視圖,您將從SQL查詢中得到它,(~60ms response time):json
# Request GET /cities/ HTTP/1.1 Accept: application/json # Response HTTP/1.1 200 OK Content-Type: application/json; charset=UTF-8 ['Moscow', 'London', 'Paris']
第二次請求將擊中緩存。沒有sql計算,沒有數據庫查詢,(~30 ms response time):後端
# Request GET /cities/ HTTP/1.1 Accept: application/json # Response HTTP/1.1 200 OK Content-Type: application/json; charset=UTF-8 ['Moscow', 'London', 'Paris']
總結:減小響應時間取決於API方法內部的計算複雜性。緩存
cache_response裝飾器能夠接收兩個參數:app
@cache_response(timeout=60*60, cache='default')
若是在使用cache_response裝飾器時未指明timeout或者cache參數,則會使用配置文件中的默認配置,能夠經過以下方法指明:spa
# DRF擴展 REST_FRAMEWORK_EXTENSIONS = { # 緩存時間 'DEFAULT_CACHE_RESPONSE_TIMEOUT': 60 * 60, # 緩存存儲 'DEFAULT_USE_CACHE': 'default', }
注意,cache_response裝飾器既能夠裝飾在類視圖中的get方法上,也能夠裝飾在REST framework擴展類提供的list或retrieve方法上。使用cache_response裝飾器無需使用method_decorator進行轉換rest
二、code