美文网首页
Django 缓存与信号

Django 缓存与信号

作者: vckah | 来源:发表于2018-07-19 18:58 被阅读0次

缓存

缓存会在响应头中加一个字段:
Cache-Control: max-age=5

Expires 首部字段也可以用于告知缓存服务器该资源什么时候会过期。
在 HTTP/1.1 中,会优先处理 max-age 指令;
在 HTTP/1.0 中,max-age 指令会被忽略掉。

缓存方式有 5 种,包括:

  • 开发调试
  • 内存
 CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',
        'LOCATION': 'unique-snowflake',
    }
}
  • 文件
 CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache',
        'LOCATION': '保存文件的位置',
    }
}
  • 数据库
 CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.db.DatabaseCache',
        'LOCATION': 'my_cache_table', # 数据库表
    }
}
之后执行创建表命令 python manage.py createcachetable
  • memache 缓存(python-memcache 模块,pylibmc 模块)
    其实也能配合 Reids,有人做了插件 django-redis
    3 种应用:
  • 视图缓存
@cache_page(10)    # 缓存 10 秒
def view(request):
    pass

也可以在 url 种缓存

from django.views.decorators.cache import cache_page
urlpatterns = [
    path('foo/<int:code>/', cache_page(60 * 15)(my_view)),
]
  • 模板中使用缓存
{% load cache %}
以下是缓存的 html
{% cache 5 缓存key %}  5 秒
    <h1></h1>
{% endcache %}
  • 全站缓存
    这里用到了中间件的知识
django.middleware.cache.UpdateCacheMiddleware  --> 只有 process_response
xxx 其他中间件
django.middleware.cache.FetchFromCacheMiddleware --> 只有 process_request

信号

Django 包含一个“信号调度程序”,它有助于在框架中的其他位置发生操作时通知分离的应用程序。简而言之,信号允许某些发送者通知一组接收器已经发生了某些动作。当许多代码可能对同一事件感兴趣时,它们特别有用。
在用户注册后,保存密码到数据库中

# signals.py
from django.db.models.signals import post_save
from django.dispatch import receiver
from django.contrib.auth import get_user_model

User = get_user_model()

@receiver(post_save, sender=User)
def create_auth_token(sender, instance=None, created=False, **kwargs):
    if created:
        password = instance.password
        instance.set_password(password)
        instance.save()

然后在 apps.py 中设置:

class UsersConfig(AppConfig):
    def ready(self):
        import users.signals

Django 信号分类

Django信号其实是观察者模式

  • 与模型相关
    pre_init model 执行构造方法前
    post_init model 执行构造方法后
    pre_save django的model对象保存前,自动触发
    post_save django的model对象保存后,自动触发
    pre_delete django的model对象删除前,自动触发
    post_delete django的model对象删除后,自动触发
    m2m_changed django的model中使用m2m字段操作第三张表(add,remove,clear)前后,自动触发
    class_prepared 程序启动时,检测已注册的app中model类,对于每一个类,自动触发
  • 与 migrate 相关
    pre_migrate 执行migrate命令前,自动触发
    post_migrate 执行migrate命令后,自动触发
  • 与请求相关
    request_started 请求到来前,自动触发
    request_finished 请求结束后,自动触发
    got_request_exception 请求异常后,自动触发
  • 与测试相关
    setting_changed 使用test测试修改配置文件时,自动触发
    template_rendered 使用test测试渲染模板时,自动触发
  • 数据库相关
    connection_created 创建数据库连接时,自动触发
    另外一种方法激活信号,将代码放置于项目的根 __init__.py
from django.db.backends.signals import pre_save

def callback(sender, *kwargs):
        pass

pre_save.connect(callback,sender=<model 的名字>)
这里 model 的名字可以不指定
那么就意味着所有 model 保存时都会触发

另外还可以自定义信号,不过需要自己指定发送信号,详情见官方文档

相关文章

  • Django 缓存与信号

    缓存 缓存会在响应头中加一个字段:Cache-Control: max-age=5 Expires 首部字段也可以...

  • django-cache

    以前学习django缓存,视频看的云里雾里,今天读到一篇文章豁然开朗,以此记录。感谢!链接:[Django缓存和信号

  • Django 框架之 Django信号

    知识点 概念 如何监听信号 Django内置信号 自定义信号 使用Django内置信号 概念 Django 提供一...

  • 第十一天

    drf的缓存设置 django本身是支持缓存的,drf的缓存是在django缓存上的二次开发。安装drf exte...

  • django缓存与redis

    什么是缓存 缓存系统是为了解决数据库服务器和web服务器之间的瓶颈。如果一个网站的流量很大,这个瓶颈将会非常明显,...

  • django项目中使用 memcached (安装与使用)

    在django 中,如果你想提升请求的响应速度,那么使用缓存是很好的办法。django的官网上介绍了如何引入缓存,...

  • 33_Django的缓存

    Django的缓存 全站缓存: 单页面缓存: 页面局部缓存: 缓存的位置:(只需要改配置文件) 内存 文件 数据库...

  • django 信号

    django存在一个’信号调度程序’, 可以实现当某事件在框架内发生时,通知到我们的应用程序。比如当某个时间(ev...

  • Django信号

    转载:https://blog.csdn.net/healthy_coder/article/details/52...

  • Django - 信号

    引出:想对每个增加数据给写条日志。 Django中提供了“信号调度”,用于在框架执行操作时解耦。通俗来讲,就是一些...

网友评论

      本文标题:Django 缓存与信号

      本文链接:https://www.haomeiwen.com/subject/fvatmftx.html