Django信号机制,以“post_save”为例

1、背景

我的博客设置了缓存,所以需要在新增文章或者删除文章时删除缓存,否则继续查旧缓存的话看不到新发布的文章或者过时的文章。

2、post_save信号介绍

  • django.db.models.signals.post_save:在模型调用 save()方法之后发送,可以理解为再后台保存文章时会触发这个信号。

3、使用

3.1 signals.py(新建)

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

# 文章缓存更新@receiver(post_save, sender=Post)
def cache_post_save_handler(sender, instance, *args, **kwargs):    
    cache.delete('cached_posts')
  • 导入信号:post_save
  • 导入文章模型
  • 导入receiver,用receiver装饰函数,表明这个函数就是接收者,参数1:触发条件,参数2:信号的发出方
  • 清除缓存

3.2 init.py

default_app_config = 'blog.apps.BlogConfig'

3.3 apps.py

from django.apps import AppConfig
class BlogConfig(AppConfig):    
    ……    
    def ready(self):        
        import blog.signals
  • ready函数,用于导入信号

4、Django常用内置信号

  • django.db.models.signals.pre_save & post_save在模型调用 save()方法之前或之后发送。
  • django.db.models.signals.pre_init& post_init在模型调用/ init 方法之前或之后发送。
  • django.db.models.signals.pre_delete & post_delete在模型调用delete()方法或查询集调用delete() 方法之前或之后发送。
  • django.db.models.signals.m2m_changed在模型多对多关系改变后发送。
  • django.core.signals.request_started & request_finished Django建立或关闭HTTP 请求时发送。

发表评论

评论列表,共 0 条评论

    暂无评论