由于Django是动态网站,所有每次请求均会去数据进行相应的操作,当程序访问量大时,耗时必然会更加明显,最简单解决方式是使用:缓存,缓存将一个某个views的返回值保存至内存或者Redis中,5分钟内再有人来访问时,则不再去执行view中的操作,而是直接从内存或者Redis中之前缓存的内容拿到,并返回

    Django的缓存的功能需要在全局设置参数settings.py中设置,在文件中加入如下配置能容

setting.py

CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache',
        'LOCATION': os.path.join(BASE_DIR, 'cache'),
        'TIMEOUT': 600,
        'OPTIONS': {
            'MAX_ENTRIES': 1000
        }
    }
}

Django入门(七)     django的缓存_(七)


配置中参数的意义

BACKEND :表示要选择缓存的模式,范例缓存采用本地文件来进行缓存。django中支持的全部缓存格式如下:

'django.core.cache.backends.db.DatabaseCache'           #使用数据库缓存
'django.core.cache.backends.dummy.DummyCache'
'django.core.cache.backends.filebased.FileBasedCache'   #本地文件缓存
'django.core.cache.backends.locmem.LocMemCache'         #本地内存缓存
'django.core.cache.backends.memcached.MemcachedCache'   #使用memcache缓存
'django.core.cache.backends.memcached.PyLibMCCache'

在 github 上也有用 redis 做 Django的缓存系统的开源项目:https://github.com/niwibe/django-redis


LOCATION :表示本地缓存的存储位置,范例中是存储在mydjango项目中的cache目录下


TIMEOUT :表示超时时间,单位是秒。超过指定时间缓存就会整体刷新清空掉。


MAX_ENRIES: 对于内存,文件系统和数据库后端,高速缓存允许的最大条目数,超出这个数则旧值将被删除。 这个参数默认是300


CULL_PERCENTAGE :当达到 max_entries 的时候,被删除的条目比率。 实际的比率是 1/cull_percentage ,所以设置cull_frequency=2就是在达到 max_entries 的时候去除一半数量的缓存。

    把 cull_frequency 的值设置为 0 意味着当达到 max_entries 时,缓存将被清空。 这将以很多缓存丢失为代价,大大提高接受访问的速度。


在mydjango项目目录下创建一个cache目录用于存放缓存文件

Django入门(七)     django的缓存_Django_02


在app01应用目录下的views.py里创建一个返回在前端返回当前时间的cache_time()函数

/app01/views.py

from django.shortcuts import HttpResponse
import time
#导入cache模块
from django.views.decorators.cache import cache_page
"""
给要缓存的页面函数加上装饰器,这个函数的执行结果就会被缓存到文件里
括号里的内容60秒*15  也就是15分钟
"""
@cache_page(60 * 15)
def cache_time(request):
    now=time.strftime('%Y-%m-%d %H:%M:%S')
    return HttpResponse(now)


配置mydjango子目录下的urls.py添加函数与url之间的映射关系

/mydjango/urls.py

#!/usr/bin/env python
# coding:utf-8
from django.conf.urls import url,include
from django.contrib import admin
from app01 import views
urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^cache_time/$', views.cache_time),
]

Django入门(七)     django的缓存_Django_03

最后打开浏览器不停的刷新,看到页面时间一直保持不动。就说明缓存已经生效了。

Django入门(七)     django的缓存_(七)_04


最后查看一下刚才创建的cache目录是否已经产生缓存文件

Django入门(七)     django的缓存_(七)_05




备注:我们在settings.py 通过TIMEOUT设置了一个超时时间,在views.py里通过装饰器@cache_page(60 * 15)也设置了一个超时时间。可以这样理解,settings.py函数里的超时时间是一个全局默认的超时时间。如果我们在views.py里给函数设置了@cache_page(60 * 15),那么这个函数的超时时间就是15分钟。如果我们没有指定缓存时间的话,就按settings.py设置的默认值超时。