⚡ 编程实验室🏗️ HTML🎨 CSS⚡ JavaScript🐍 Python🗄️ SQL☕ Java⚛️ React💚 Vue🟢 Node.js⚙️ C语言🐘 PHP🐹 Go🔷 TypeScript🐬 MySQL🔧 C++🎯 C#🦀 Rust🅱️ Bootstrap💡 jQuery🎸 Django🍃 MongoDB👗 Sass🎪 Kotlin📊 R语言📋 XML📊 Excel🐘 PostgreSQL🐳 Docker🅰️ Angular🎮 游戏🏠 网站首页

Django信号实战

利用信号机制实现松耦合的事件驱动编程。 · 难度:入门 · +15XP

信号介绍

Django信号允许某些发送者通知一组接收者某个动作已经发生。它常用于在模型保存、删除等操作前后执行额外逻辑,而无需修改模型代码。

内置信号

信号触发时机
pre_save模型save()之前
post_save模型save()之后
pre_delete模型delete()之前
post_delete模型delete()之后
m2m_changed多对多关系变更时

定义接收器

from django.db.models.signals import post_save
from django.dispatch import receiver
from .models import Profile, User

@receiver(post_save, sender=User)
def create_user_profile(sender, instance, created, **kwargs):
    if created:
        Profile.objects.create(user=instance)

连接信号

推荐在apps.pyready方法中导入信号模块:

# apps.py
from django.apps import AppConfig

class MyappConfig(AppConfig):
    default_auto_field = 'django.db.models.BigAutoField'
    name = 'myapp'

    def ready(self):
        import myapp.signals

练习提示: 在starter_code中编写一个post_save信号接收器,当Article模型被保存时,自动创建一条Log记录,内容为'Article saved: {title}'。

Ctrl+Enter
🚀 升级VIP
解锁全部课程+AI助手

🏆 学习排行

加载中...

📊 统计

📖 189 篇
0 完成
🔥 0