django信号
- 是一种机制,允许你在特定事件发生时(不需要再次修改"特定事件"的代码),执行另一部分的代码逻辑
- 意义: 类似于
装饰器
的作用,可以在不修改现有代码的逻辑下,触发自定义逻辑
- 常见用途
- 数据变更通知:当模型实例被创建、更新或删除时发送信号
- 用户注册/登录:在用户注册或登录时执行某些操作
- 缓存失效:在数据发生变化时自动清除缓存
- 发送邮件/通知:在特定事件发生时发送电子邮件或其他通知
- 实例说明
- 比如先创建'accounts'应用
- 在'accounts'应用创建'signal.py'文件
### signal.py
from django.core.mail import send_mail
from django.db.models.signals import post_save
from django.dispatch import receiver
from django.contrib.auth.models import User
# 当创建用户时,触发以下逻辑
@receiver(post_save, sender=User)
def send_welcome_email(sender, instance, created, **kwargs):
if created:
subject = 'Welcome to Our Site!'
message = f'Hello {instance.username}, welcome to our site! We are glad to have you.'
from_email = 'no-reply@example.com'
recipient_list = [instance.email]
send_mail(subject, message, from_email, recipient_list)
- 导入信号
### accounts.apps.py
from django.apps import AppConfig
class AccountsConfig(AppConfig):
default_auto_field = 'django.db.models.BigAutoField'
name = 'accounts'
def ready(self):
# 导入创建的信号
import accounts.signals
- 测试信号
......
>>> from django.contrib.auth.models import User
>>> user = User.objects.create_user(username='testuser', email='testuser@example.com', password='password')
- 效果: 此时,应该会看到一封主题为 "Welcome to Our Site!" 的邮件发送到 testuser@example.com