Django, можно ли заставить запрос обходить кэш, даже если ключ кэша уже существует
settings.py
['django.middleware.cache.UpdateCacheMiddleware'] + MIDDLEWARE + ['django.middleware.cache.FetchFromCacheMiddleware']
middleware.py
def middleware(request):
if global_value % 2 == 1:
# bypass cache, can I do something?
response = get_response(request)
else:
response = get_response(request)
return response
Причина в том, что мы используем определенные значения в заголовках, чтобы отличить, что нужно кэшировать(url одинаковый), но кэш не может распознать это.
Я решаю эту проблему, переопределяя FetchFromCacheMiddleware: middleware.py
from django.middleware.cache import FetchFromCacheMiddleware
class MyFetchFromCacheMiddleware(FetchFromCacheMiddleware):
def process_request(self, request):
if 'version' in request.headers:
request._cache_update_cache = False
return None # Don't bother checking the cache.
return super().process_request(request)
settings.py
MIDDLEWARE = ['django.middleware.cache.UpdateCacheMiddleware'] + MIDDLEWARE + ['mobile_py.middleware.MyFetchFromCacheMiddleware']