gpt4 book ai didi

python - DRF-Extension缓存忽略查询参数

转载 作者:可可西里 更新时间:2023-11-01 11:28:25 25 4
gpt4 key购买 nike

我正在为 caching 使用 drf-extension|我的 API。但是它没有像预期的那样与 cache_response 装饰器一起工作。

它缓存 say /api/get-cities/?country=india 的响应。但是当我点击 /api/get-cities/?country=usa 时,我得到了相同的响应。

示例代码如下:

设置.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,
}

View .py

class GetCities(APIView):

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

请帮忙解决这个问题。

最佳答案

我找到了解决问题的方法。我使用 api 名称和参数名称(在我的例子中是国家/地区)的组合在 redis 中创建了自己的 key 。因此,当使用查询参数命中 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)

关于python - DRF-Extension缓存忽略查询参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43101423/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com