Django信号实战
学习使用Django信号实现松耦合的事件驱动机制,如用户注册后发送邮件。 · 难度:入门 · +15XP
Django信号
信号允许某些发送者通知一组接收者某个事件发生了。常用于模型保存后、用户登录等场景。
内置信号
| 信号 | 触发时机 |
|---|---|
| pre_save | 模型保存前 |
| post_save | 模型保存后 |
| pre_delete | 模型删除前 |
| post_delete | 模型删除后 |
示例:创建Profile
from django.db.models.signals import post_save
from django.dispatch import receiver
from django.contrib.auth.models import User
from .models import Profile
@receiver(post_save, sender=User)
def create_user_profile(sender, instance, created, **kwargs):
if created:
Profile.objects.create(user=instance)连接信号
# apps.py
class MyappConfig(AppConfig):
default_auto_field = 'django.db.models.BigAutoField'
name = 'myapp'
def ready(self):
import myapp.signals练习提示
编写一个信号,在用户登录时记录登录日志到数据库。