2017-03-29 13 views
0

caching my APIにdrf-extensionを使用しています。しかし、cache_responseデコレータでは期待通りに動作しません。クエリパラメータを無視したDRF拡張キャッシュ

応答をキャッシュします(例:/api/get-cities/?country=india)。しかし、私が/api/get-cities/?country=usaを打ったとき、私は同じ応答を得る。ここで

はサンプルコードです:

settings.py

CACHES = { 
    "default": { 
     "BACKEND": "django_redis.cache.RedisCache", 
     "LOCATION": "redis://127.0.0.1:6379/0", 
     "OPTIONS": { 
      "CLIENT_CLASS": "django_redis.client.DefaultClient" 
     }, 
     "KEY_PREFIX": "city" 
    } 
} 

REST_FRAMEWORK_EXTENSIONS = { 
    'DEFAULT_USE_CACHE': 'default', 
    'DEFAULT_CACHE_RESPONSE_TIMEOUT': 86400, 
} 

views.py

class GetCities(APIView): 

    @cache_response() 
    def get(self, request): 
     country = request.GET.get("country", "") 
     return get_cities_function(country) 

これを助けてください。

答えて

0

問題の解決策を見つけることができました。私は、私のケースの国では、API名とパラメータ名の組み合わせで自分の鍵を赤字で作成しました。だから、APIがクエリパラメータでヒットすると、それに対応するキーが存在するかどうかをチェックし、存在する場合はキャッシュレスポンスが返されます。

class GetCities(APIView): 

    def calculate_cache_key(self, view_instance, view_method, request, args, kwargs): 
     api = view_instance.get_view_name().replace(' ', '') 
     return "api:" + api + "country:" + str(request.GET.get("country", "")) 

    @cache_response(key_func='calculate_cache_key') 
    def get(self, request): 
     country = request.GET.get("country", "") 
     return get_cities_function(country) 
関連する問題