首页 > 解决方案 > Django:缓存 wrt url 并反映更改

问题描述

在 Django 中,我有一个 url,它根据动态数据进行一些计算。

因此,如果我缓存 url,那么如果动态数据有任何更改,它会返回更新的结果。

例如:喜欢购买。

用户添加他想要的项目列表。

我有一个页面 localhost/user/items/将显示他添加的所有项目列表,并带有一个链接localhost/user/items/specs以显示他添加的所有项目的规格。

显示localhost/user/items/页面需要更少的时间。

但是localhost/user/items/specs需要很多时间。

如何缓存localhost/user/items/specs并反映任何更改

标签: django

解决方案


经过大量研究源代码后,我发现如果数据未更新,如何显示缓存页面,否则显示修改后的数据视图

from django.middleware.cache import CacheMiddleware

@login_required

someview(request, slug=None)

    ######  data_updated
    # Check the conditions data modified is updated or not
    data_updated = True/False
    ######

    cachemiddleware = CacheMiddleware(cache_timeout=60*15)

    if data_updated:

        #######
            # RUN all the code for view
            # response = ..........
        #######


        # this is required because if the url is already cached it will be false
        request._cache_update_cache = True

        return cachemiddleware.process_response(request, response)

    else:

        result = cachemiddleware.process_request(request)

        if result is not None:
            return result
        else:

            #######
            # RUN all the code for view
            # response = ..........
            #######

            return cachemiddleware.process_response(request, response)

推荐阅读