python之路_day105_django之缓存、信号、admin

一、缓存

  缓存是将一些常用的数据保存内存或者memcache中,在一定的时间内有人来访问这些数据时,则不再去执行数据库及渲染等操作,而是直接从内存或memcache的缓存中去取得数据,然后返回给用户。

  django中提供了6中缓存,分别为:(1)开发者调试缓存;(2)内存缓存;(3)文件缓存;(4)数据库缓存;(5)使用python-memcached模块的Memcache缓存;(6)使用pylibmc模块的Memcache缓存。其中经常使用缓存为文件缓存和Memcache缓存。

  具体各种缓存的使用配置请参考博客:http://www.cnblogs.com/yuanchenqi/articles/8034442.html#_label2,如下介绍django中三种缓存的应用实例:

1、全局使用缓存

  全局缓存即指对整个项目中的视图进行缓存,像这种情况当然是利用中间件进行进行,中间件具体配置的方式如下:通过配置如下两个中间件和缓存失效时间,便可以使所有的视图查询数据都会在缓存失效时间范围内从缓存中查取数据。

MIDDLEWARE_CLASSES = (
    ‘django.middleware.cache.UpdateCacheMiddleware‘,                           # 所有中间件开始处
    .................................................
    ‘django.middleware.cache.FetchFromCacheMiddleware‘,                        #所有中间件结尾处
 )
CACHE_MIDDLEWARE_SECONDS=10                                                    #用于设置缓存的失效时间

2、视图使用缓存

  视图缓存即是只对指定的视图内的数据进行缓存设置,主要配置的方式如下:通过给需要缓存的视图的加装饰器@cache_page(缓存时间)便可实现视图的缓存,如下例将获得当前的当前时间在页面显示,如果是在缓存失效的时间内进行第二次访问此视图,则页面上前后显示的时间是一样的。

from django.views.decorators.cache import cache_page
import time
@cache_page(15)                                                                 #缓存失效时间15s
def index(request):
     t=time.time()
     return render(request,"index.html",locals())

3、视图局部缓存

  视图局部缓存是指视图中的某一条数据进行缓存设置,如,刷新页面时,整个网页有一部分实现缓存,具体实例如下:由此可见视图局部的缓存实现主要是在html文件中进行设置,如下实例,在有效的缓存时间范围内两次访问此页面,页面的显示的第二条时间不会发生变化。

视图函数:

import time
def index(request):
     t=time.time()
     return render(request,"index.html",locals())

html文件:

{% load cache %}                        #第一步
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
 <h3 style="color: green">不缓存:{{ t }}</h3>

{% cache 10 ‘name‘ %}                    #第二步:需要两个参数,第一个为缓存时间,第二个即为name
 <h3>缓存:{{ t }}</h3>
{% endcache %}
</body>
</html>

二、信号

  信号的实现的效果就是监听指定的动作,当指定的动作发生后执行相应的操作,有点同回调函数的意思。django中提供了很多的动作信号,介绍如下:当配置好指定的信号是,相应的动作发生时,信号就会执行其相应的回调函数。

Model signals
    pre_init                    # django的modal执行其构造方法前,自动触发
    post_init                   # django的modal执行其构造方法后,自动触发
    pre_save                    # django的modal对象保存前,自动触发
    post_save                   # django的modal对象保存后,自动触发
    pre_delete                  # django的modal对象删除前,自动触发
    post_delete                 # django的modal对象删除后,自动触发
    m2m_changed                 # django的modal中使用m2m字段操作第三张表(add,remove,clear)前后,自动触发
    class_prepared              # 程序启动时,检测已注册的app中modal类,对于每一个类,自动触发
Management signals
    pre_migrate                 # 执行migrate命令前,自动触发
    post_migrate                # 执行migrate命令后,自动触发
Request/response signals
    request_started             # 请求到来前,自动触发
    request_finished            # 请求结束后,自动触发
    got_request_exception       # 请求异常后,自动触发
Test signals
    setting_changed             # 使用test测试修改配置文件时,自动触发
    template_rendered           # 使用test测试渲染模板时,自动触发
Database Wrappers
    connection_created          # 创建数据库连接时,自动触发

  如果需要记录项目中向数据库添加数据的日志,就可用到post_save信号,一旦项目中有添加数据的操作时就会执行信号对应的回调函数。注意,信号的设置一般配置在应用或者项目的init.py中,保证项目运行后,信号被启动。如下实例:

方式一:信号与callback绑定关系

from django.db.models.signals import pre_save, post_save

def callback(sender,**kwargs):
   ‘‘‘    执行保存日志逻辑,sender    和kwargs参数有你想要的数据   ‘‘‘
    print(sender)
    print(kwargs)
post_save.connect(callback)                

方式二:给callback加装饰器

from django.db.models.signals import post_save
from django.dispatch import receiver

@receiver(post_save)
def callback(sender,**kwargs):
    print(sender)
    print(kwargs)

三、admin管理工具

  详细内容可以参考博客:http://www.cnblogs.com/yuanchenqi/articles/8323452.html

原文地址:https://www.cnblogs.com/seven-007/p/8336718.html

时间: 2024-10-10 04:14:05

python之路_day105_django之缓存、信号、admin的相关文章

Python之路-(Django(csrf,中间件,缓存,信号,Model操作,Form操作))

csrf 中间件 缓存 信号 Model操作 Form操作 csrf: 用 django 有多久,我跟 csrf 这个概念打交道就有久了. 每次初始化一个项目时都能看到 django.middleware.csrf.CsrfViewMiddleware 这个中间件 每次在模板里写 form 时都知道要加一个 {% csrf_token %} tag 每次发 ajax POST 请求,都需要加一个 X_CSRFTOKEN 的 header 什么是 CSRF CSRF, Cross Site Req

Python之路69-Django缓存

目录 一.介绍 二.配置 三.应用 一.介绍 由于Django是动态网站,所有每次请求均会去数据库进行相应的操作,当程序访问量大时,耗时必然会更加明显,最简单解决方式是使用:缓存,缓存将一个views的返回值保存至内存或者memcache中,5分钟内再有人来访问时,则不再去执行views中的操作,而是直接从内存或者redis中取之前缓存的内容,并返回. Django中提供了6中缓存方式: 开发调试 内存 文件 数据库. Memcache缓存(python-memcached模块) Memcach

Python之路【第十七篇】:Django【进阶篇 】

Python之路[第十七篇]:Django[进阶篇 ] Model 到目前为止,当我们的程序涉及到数据库相关操作时,我们一般都会这么搞: 创建数据库,设计表结构和字段 使用 MySQLdb 来连接数据库,并编写数据访问层代码 业务逻辑层去调用数据访问层执行数据库操作 import MySQLdb def GetList(sql): db = MySQLdb.connect(user='root', db='wupeiqidb', passwd='1234', host='localhost')

Python之路【第十七篇】:Django之【进阶篇】

Python之路[第十七篇]:Django[进阶篇 ] Model 到目前为止,当我们的程序涉及到数据库相关操作时,我们一般都会这么搞: 创建数据库,设计表结构和字段 使用 MySQLdb 来连接数据库,并编写数据访问层代码 业务逻辑层去调用数据访问层执行数据库操作 import MySQLdb def GetList(sql): db = MySQLdb.connect(user='root', db='wupeiqidb', passwd='1234', host='localhost')

Python之路【第十七篇】:Django【进阶篇】

Python之路[第十七篇]:Django[进阶篇 ] Model 到目前为止,当我们的程序涉及到数据库相关操作时,我们一般都会这么搞: 创建数据库,设计表结构和字段 使用 MySQLdb 来连接数据库,并编写数据访问层代码 业务逻辑层去调用数据访问层执行数据库操作 import MySQLdb def GetList(sql): db = MySQLdb.connect(user='root', db='wupeiqidb', passwd='1234', host='localhost')

Python之路【第十六篇】:Django【基础篇】

Python之路[第十六篇]:Django[基础篇] Python的WEB框架有Django.Tornado.Flask 等多种,Django相较与其他WEB框架其优势为:大而全,框架本身集成了ORM.模型绑定.模板引擎.缓存.Session等诸多功能. 基本配置 一.创建django程序 终端命令:django-admin startproject sitename IDE创建Django程序时,本质上都是自动执行上述命令 其他常用命令: python manage.py runserver

Python之路【第九篇】:Python操作 RabbitMQ、Redis、Memcache、SQLAlchemy

Python之路[第九篇]:Python操作 RabbitMQ.Redis.Memcache.SQLAlchemy Memcached Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速度.Memcached基于一个存储键/值对的hashmap.其守护进程(daemon )是用C写的,但是客户端可以用任何语言来编写,并通过memcached协议与守护进程通信. Memc

Python之路【第三篇】:Python基础(二)

Python之路[第三篇]:Python基础(二) 内置函数 一 详细见python文档,猛击这里 文件操作 操作文件时,一般需要经历如下步骤: 打开文件 操作文件 一.打开文件 1 文件句柄 = file('文件路径', '模式') 注:python中打开文件有两种方式,即:open(...) 和  file(...) ,本质上前者在内部会调用后者来进行文件操作,推荐使用 open. 打开文件时,需要指定文件路径和以何等方式打开文件,打开后,即可获取该文件句柄,日后通过此文件句柄对该文件操作.

Python之路【第十八篇】:Web框架们

Python之路[第十八篇]:Web框架们 Python的WEB框架 Bottle Bottle是一个快速.简洁.轻量级的基于WSIG的微型Web框架,此框架只由一个 .py 文件,除了Python的标准库外,其不依赖任何其他模块. 1 2 3 4 pip install bottle easy_install bottle apt-get install python-bottle wget http://bottlepy.org/bottle.py Bottle框架大致可以分为以下部分: 路