Django之Signals
文章目錄
在Django之cache的例子中,我们使用了缓存。但这里存在一个问题,当我们添加了数据后,因为缓存是有实效的,里面的数据没有更新。此时需要有一个机制,当我们更新的model的数据时,要清除缓存。Django提供的Signals可以满足这个需求。
在model保存和删除时,需要进行清除缓存。这里用到post_save和post_delete两个信号。
在area的models.py里添加如下代码1
2
3
4
5
6
7
8
9
10@receiver(post_delete, sender=Area)
@receiver(post_save, sender=Area)
def delete_cache(sender, **kwargs):
#清除cache
obj = kwargs['instance']
if obj.parent is None:
key = "city_list_0"
else:
key = "city_list_%s" % obj.parent_id
cache.delete(key)
之后在admin后台添加和删除数据时,缓存就会被清除。访问http://127.0.0.1:8000/area/api/city/list/1 时就可以读取到最新的数据
想自己尝试的可以下载test-django