以下是Django cache_page()函数的作用、使用方法及实例说明:
作用
Django的cache_page()函数可以缓存视图的输出结果,使得对同一个页面的请求可以直接返回缓存中的内容,而不需要重新执行视图函数,从而提高网站的响应速度和性能。
使用方法
使用cache_page()函数需要导入它,即在视图文件的开头加入以下语句:
from django.views.decorators.cache import cache_page
然后在视图函数上加上cache_page()装饰器,参数是时间,表示缓存的时长(单位为秒):
@cache_page(60) # 缓存60秒
def my_view(request):
# 视图函数的具体实现
实例说明
示例1:缓存文章列表页面的数据
假设一个简单的博客网站,需要展示最新的文章列表,每次请求需要查询数据库,处理数据并渲染模板,这样会消耗比较多的时间,影响网站响应速度。我们可以使用cache_page()函数来缓存页面,使得对同一页面的请求可以直接返回缓存的结果:
from django.views.decorators.cache import cache_page
from django.shortcuts import render
from myapp.models import Article
# 缓存1分钟
@cache_page(60)
def article_list(request):
articles = Article.objects.all().order_by('-created_at')
return render(request, 'article_list.html', {'articles': articles})
这样,第一次请求该页面时,会将页面数据缓存起来,之后的请求都可以直接返回缓存中的数据。
示例2:根据GET参数缓存页面
某个页面需要根据GET参数来展示不同的内容,我们可以使用GET参数来作为缓存的key,以实现不同参数缓存不同的页面结果。
from django.views.decorators.cache import cache_page
from django.shortcuts import render
# 缓存1分钟,根据category参数来做缓存key
@cache_page(60*10, key_prefix='blog_category')
def blog_list(request):
category = request.GET.get('category', 'all')
# 查询数据库并渲染模板
return render(request, 'blog_list.html', {'category': category})
这样,缓存就会以’blog_category’为前缀并加上’category’参数的值作为缓存的key,不同参数的请求可以分别缓存,提高缓存的命中率。