Tony.Luo
Tony.Luo

Reputation: 57

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

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.

Upvotes: 0

Views: 36

Answers (1)

Tony.Luo
Tony.Luo

Reputation: 57

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']

Upvotes: 0

Related Questions