省市區的數據是經常被用戶查詢使用的,而且數據基本不變化,所以我們可以將省市區數據進行緩存處理,減少數據庫的查詢次數。
在Django REST framework中使用緩存,可以通過drf-extensions
擴展來實現。
關於擴展使用緩存的文檔,可參考鏈接http://chibisov.github.io/drf-extensions/docs/#caching
安裝
pip install drf-extensions
使用方法
1) 直接添加裝飾器
可以在使用rest_framework_extensions.cache.decorators中的cache_response裝飾器來裝飾返回數據的類視圖的對象方法,如
class CityView(views.APIView):
@cache_response()
def get(self, request, *args, **kwargs):
...
cache_response裝飾器可以接收兩個參數
@cache_response(timeout=60*60, cache='default')
- timeout 緩存時間
- cache 緩存使用的Django緩存後端(即CACHES配置中的鍵名稱)
如果在使用cache_response裝飾器時未指明timeout或者cache參數,則會使用配置文件中的默認配置,可以通過如下方法指明:
# DRF擴展
REST_FRAMEWORK_EXTENSIONS = {
# 緩存時間
'DEFAULT_CACHE_RESPONSE_TIMEOUT': 60 * 60,
# 緩存存儲
'DEFAULT_USE_CACHE': 'default',
}
- DEFAULT_CACHE_RESPONSE_TIMEOUT 緩存有效期,單位秒
- DEFAULT_USE_CACHE 緩存的存儲方式,與配置文件中的
CACHES
的鍵對應。
注意:
1.cache_response裝飾器既可以裝飾在類視圖中的get方法上,
2.也可以裝飾在REST framework擴展類提供的list或retrieve方法上。
3.使用cache_response裝飾器無需使用method_decorator進行轉換。
2)使用drf-extensions提供的擴展類
drf-extensions擴展對於緩存提供了三個擴展類:
-
ListCacheResponseMixin
用於緩存返回列表數據的視圖,與ListModelMixin擴展類配合使用,實際是爲list方法添加了cache_response裝飾器
-
RetrieveCacheResponseMixin
用於緩存返回單一數據的視圖,與RetrieveModelMixin擴展類配合使用,實際是爲retrieve方法添加了cache_response裝飾器
-
CacheResponseMixin
爲視圖集同時補充List和Retrieve兩種緩存,與ListModelMixin和RetrieveModelMixin一起配合使用。
三個擴展類都是在rest_framework_extensions.cache.mixins
中。
緩存數據保存位置與有效期的設置
我們想把緩存數據保存在redis中,且設置有效期,可以通過在配置文件中定義的方式來實現。
在配置文件中增加
# DRF擴展
REST_FRAMEWORK_EXTENSIONS = {
# 緩存時間
'DEFAULT_CACHE_RESPONSE_TIMEOUT': 60 * 60,
# 緩存存儲 default 表示緩存設置中設置的默認存儲位置
'DEFAULT_USE_CACHE': 'default',
}