详解Django的 cache_page() 函数:装饰器,缓存视图结果

  • Post category:Python

Django的cache_page()函数是一个用于缓存响应的装饰器,可以将视图的响应结果缓存到内存中,以减少对数据库、磁盘等外部资源的访问,从而提高响应速度。

使用方法如下:

在需要缓存的视图函数上方添加cache_page装饰器,并指定缓存时间,单位为秒:

from django.views.decorators.cache import cache_page

@cache_page(60)  # 缓存时长为60秒
def my_view(request):
    # 视图函数的处理内容

在访问my_view的时候,第一次访问后就会将这个函数的响应结果缓存下来,并在一定时间内直接返回缓存结果,而不会再调用my_view函数进行计算。当缓存时间到期或者手动清除缓存后,再次访问才会重新计算响应结果并缓存。

下面是两个应用cache_page的实例。

  1. 在一个博客网站中,用户访问首页的响应内容很少变化,可以缓存对应视图函数的结果,提高首页的响应速度。假设视图函数为index,缓存时间为1小时。
from django.views.decorators.cache import cache_page

@cache_page(3600)  # 缓存时长为1小时
def index(request):
    # 视图函数的处理内容
    pass
  1. 在一个电商网站中,用户访问商品详情页的响应内容基本不变,也可以使用cache_page进行缓存。但是由于商品价格、库存等信息随时可能发生变化,因此需要使用缓存的混存模式(cache_page的第二个参数),确保在一定时间内直接返回缓存结果,但每隔一段时间会重新计算缓存结果进行更新。假设视图函数为product_detail,缓存时间为30分钟,更新频率为5分钟。
from django.views.decorators.cache import cache_page

@cache_page(1800, cache='default', key_prefix='product_detail')
def product_detail(request, product_id):
    # 视图函数的处理内容
    pass

这里cache参数指定缓存使用的前端缓存,key_prefix参数指定缓存的键名,以区分不同的缓存。在这个例子中,我们设定了缓存时间为30分钟,即当用户请求一个商品详情页时,如果缓存中存在对应的缓存响应,那么就直接返回缓存结果;如果缓存中不存在对应的缓存响应,那么就调用视图函数product_detail进行计算。此时,Django还会在缓存时间到期前的5分钟内,自动重新计算缓存并更新缓存内容。