Django, can I force a request to bypass the cache, even if the cache key already exists

22 Views Asked by At
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

The reason is that we use certain values ​​in headers to distinguish which need cache(url is same), but the cache cannot recognize it.

1

There are 1 best solutions below

0
Tony.Luo On

I resolve this problem by override 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']