【补充】Django缓存与内置信号
【一】缓存的介绍
【1】什么是缓存
-
简单概括就是将对数据库操作查询所得到的数据放入另外一台机器上(缓存)中
- 当用户再次请求时,直接去缓存中拿,避免对数据库的频繁操作,加快数据的显示时间
- 需要知道的是,缓存里面的数据一般都设置有超时时间,缓存一般用在数据变化不大,实时率不高的情况下。
-
由于Django是动态网站,所有每次请求均会去数据进行相应的操作
- 当程序访问量大时,耗时必然会更加明显,最简单解决方式是使用:缓存
- 缓存将一个某个views的返回值保存至内存或者memcache中
- 5分钟内(默认配置)再有人来访问时,则不再去执行view中的操作
- 而是直接从内存或者Redis中之前缓存的内容拿到,并返回。
【2】Django中提供了6种缓存方式:
- 开发调试
- 内存
- 文件
- 数据库
- Memcache缓存(python-memcached模块)
- Memcache缓存(pylibmc模块)
【二】配置
【1】开发调试
【2】内存
【3】文件(网站比较小,还没钱,可以用文件的形式)
【4】数据库
【5】Memcache缓存(python-memcached模块)
【6】Memcache缓存(pylibmc模块)
【7】Redis缓存(依赖:pip3 install django-redis)
- 视图层
【三】应用
【1】全站使用(利用Django中间件)
- 使用中间件,经过一系列的认证等操作
- 如果内容在缓存中存在
- 则使用FetchFromCacheMiddleware获取内容并返回给用户
- 当返回给用户之前,判断缓存中是否已经存在
- 如果不存在则UpdateCacheMiddleware会将缓存保存至缓存
- 从而实现全站缓存
- 如果内容在缓存中存在
【2】单独视图缓存
(1)方式一:
(2)方式二:
局部视图(html页面)使用
(1)引入TemplateTag
(2)使用缓存
【四】信号
- 1.如何对数据库的增加操作记录日志
- 2.信号比中间件的区别
- Django中提供了“信号调度”,用于在框架执行操作时解耦。
- 通俗来讲,就是一些动作发生的时候,信号允许特定的发送者去提醒一些接受者。
【五】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 |
创建数据库连接时,自动触发 |
- 对于Django内置的信号
- 仅需在Django必定能执行的地方注册指定信号
- 当程序执行相应操作时
- 自动触发注册函数:
【六】自定义信号
__EOF__

本文作者:Chimengmeng
本文链接:https://www.cnblogs.com/dream-ze/p/17559518.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
本文链接:https://www.cnblogs.com/dream-ze/p/17559518.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
本文来自博客园,作者:Chimengmeng,转载请注明原文链接:https://www.cnblogs.com/dream-ze/p/17559518.html