DJANGO进阶:信号机制

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






posted @ 2024-11-26 16:33  清安宁  阅读(3)  评论(0编辑  收藏  举报