Django入门(七) 缓存

由于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
        }
    }
}

配置中参数的意义

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目录用于存放缓存文件

在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),
]

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

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

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

时间: 2024-10-07 06:10:17

Django入门(七) 缓存的相关文章

Django入门全套(第三部)

前两部链接 django入门全套(第一部) Django入门全套(第二部) 本章内容: Django 发送邮件 Django cookie Django session Django CSRF Django 发送邮件 我们常常会用到一些发送邮件的功能,比如有人提交了应聘的表单,可以向HR的邮箱发邮件,这样,HR不看网站就可以知道有人在网站上提交了应聘信息.今天我们尝试用django发送邮件做尝试 1.配置相关参数settings 往settings添加下面几行数据 EMAIL_BACKEND =

django入门 -- 简单流程

django入门 -- 简单流程 这里简单的演示完成一个 django 大概流程,后面会有详细解释 搭建开发环境 以下使用的是 ubuntu 系统 在生产环境中,有的时候,我们开发的项目可能用的是几个不同的 环境,所以通常我们会创建虚拟环境,在虚拟环境中安装我们需要的 配置,这里从配置虚拟环境开始 创建虚拟环境 创建:mkvirtualenv [虚拟环境名称] 删除:rmvirtualenv [虚拟环境名称] 进入:workon [虚拟环境名称] 退出:deactivate 所有的虚拟环境,都位

Python爬虫入门七之正则表达式

在前面我们已经搞定了怎样获取页面的内容,不过还差一步,这么多杂乱的代码夹杂文字我们怎样把它提取出来整理呢?下面就开始介绍一个十分强大的工具,正则表达式! 1.了解正则表达式 正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符.及这些特定字符的组合,组成一个"规则字符串",这个"规则字符串"用来表达对字符串的一种过滤逻辑. 正则表达式是用来匹配字符串非常强大的工具,在其他编程语言中同样有正则表达式的概念,Python同样不例外,利用了正则表达式,我

转 Python爬虫入门七之正则表达式

静觅 » Python爬虫入门七之正则表达式 1.了解正则表达式 正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符.及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑. 正则表达式是用来匹配字符串非常强大的工具,在其他编程语言中同样有正则表达式的概念,Python同样不例外,利用了正则表达式,我们想要从返回的页面内容提取出我们想要的内容就易如反掌了. 正则表达式的大致匹配过程是:1.依次拿出表达式和文本中的字符比较,2.如果每一个

[WebGL入门]七,context的初始化

注:文章译自http://wgld.org/,原作者杉本雅広(doxas),文章中如果有我的额外说明,我会加上[lufy:],另外,鄙人webgl研究还不够深入,一些专业词语,如果翻译有误,欢迎大家指正. 非常重要的初始化 从这次开始,开始着手WebGL的处理.首先是WebGL的初始化,完成渲染前的所有准备.前面的文章也给过HTML的雏形,还记得吧,像下面的代码这样. <html> <head> <title>WebGL TEST</title> <s

Django入门笔记

Django入门笔记 **文档包含Django安装包.学习的笔记.代码等 安装 Django参考附件,只需要把附件拷贝到你需要的目录就行.Django是1.8.16版本 Python:在附件中,其中有Django需要的依赖包 编辑器:Aptana,一个强大的IDE工具,可以在上边新建模板,支持各种语言 Django项目创建 **可以用附件中的工程目录或者自己新建 新建工程-创建Django 新建工程-配置Django工程 工程创建完成后,会在工程目录中自动创建以下几个py文件 settings.

python16_day15【Django入门】

一.Django基本 1.什么是框架 框架,即framework,特指为解决一个开放性问题而设计的具有一定约束性的支撑结构,使用框架可以帮你快速开发特定的系统,简单地说,就是你用别人搭建好的舞台来做表演.对于所有的Web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端. 1 import socket 2 3 def handle_request(client): 4 5 buf = client.recv(1024) 6 client.send("HTTP

python学习笔记--Django入门四 管理站点

上一节  Django入门三 Django 与数据库的交互:数据建模 "管理员界面"是基础功能中的重要部分.. 激活管理员界面 管理界面是 Django 中最酷的一部分.但是不是所有人都需要它,所以它是可选的.这也就意味着你需要跟着三个步骤来激活它. 在你的 models 中加入admin metadata. 不是所有的models都能够(或应该)被管理员编辑,你需要给models标记一个管理员接口(interface),通过给models添加一个内部类'admin'完成接口标记.所以

AppleWatch开发入门七——watchOS中通知的应用

AppleWatch开发入门七--watchOS中通知的应用 一.引言 在iOS系统中,支持的通知有两种类型:本地通知和远程通知.本地通知多用于计时类通知,远程的又称推送,多用于一些提示动态的提示信息.这里有相关通知的一些知识总结: 本地推送:http://my.oschina.net/u/2340880/blog/405491. 远程推送:http://my.oschina.net/u/2340880/blog/413584. 在watch中,通知是和iphone同步的,在iphone上的Ap