首页 > 其他分享 >DJANGO进阶:信号机制

DJANGO进阶:信号机制

时间:2024-11-26 16:46:24浏览次数:7  
标签:进阶 models django accounts User 信号 import DJANGO email

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






标签:进阶,models,django,accounts,User,信号,import,DJANGO,email
From: https://www.cnblogs.com/qinganning/p/18570472

相关文章

  • Django框架--中间件
    一、介绍1.中间件的定义Django中间件是一个轻量级、底层的“插件”系统,用于全局地修改Django的输入或输出。每个中间件组件可以对请求进行处理或对响应进行处理,或者同时处理二者。2.中间件的功能中间件可以执行的操作包括:请求预处理:在视图函数处理请求之前,执行一些前置操作(如......
  • C进阶 指针进阶
    文章目录一.指针初阶的补充二.数组指针(指针进阶开始)三.数组传参和指针传参四.函数指针五.有趣的代码,常量指针与指针常量前言指针是c语言里面很重要的模块,我们应该熟练这些指针的运用,这样才可以在后面的数据结构和结构体里面更好的掌握内容一.指针初阶的补充1.指针......
  • C进阶 结构体与链表
    文章目录一,回顾一点结构体与指针二,结构体怎么与链表联系在一起三,链表的头插法和尾插法四,删除特定的节点和插入特定的节点(虚拟头结点实现)前言这里讲述的是链表与结构体的关系,把两个联系在一起可以很好的把杂乱的数据通过链表联系在一起,这样可以更加便利去修改数据和维护......
  • Android15音频进阶之HwAudioSource设置source解析(九十六)
    简介:CSDN博客专家、《Android系统多媒体进阶实战》一书作者新书发布:《Android系统多媒体进阶实战》......
  • Go进阶21:Goland 6条Tips让编程更有效率
    作为一个重度使用JetbrainsIDE全家桶的用户.这里我有几条可以加速您开发速度,减少您Paste/Copy敲打键盘的Tips.1.快速实现Interface操作步骤:光标移动到struct名称上Alt/Option+Enter选择ImplementInterface…Control+I搜索您需要实现的interface2.快速抽象I......
  • OpenGL 进阶系列16 - Multisample Framebuffer Object 介绍
    一:概述        MultisampleFramebufferObject(FBO)是OpenGL提供的一种机制,用于在自定义的帧缓冲中实现多重采样抗锯齿(MultisampleAnti-Aliasing,MSAA)。它允许开发者创建一个多重采样的渲染目标,在对场景进行高质量渲染后再解析(resolve)为单一采样的图像。二:相......
  • 【linux学习指南】初识Linux进程信号与使用
    文章目录......
  • ThreeJs-03材质进阶
    一.uv贴图在3D计算机图形学中,UV映射是一种将2D纹理映射到3D模型表面的方法。在这里,“U”和“V”代表了2D纹理空间的坐标,这与2D笛卡尔坐标系统中的“X”和“Y”是类似的。在3D模型的每个顶点上,都会有一组对应的UV坐标,它们定义了3D模型在这个顶点上的表面应当对应纹理图像的哪个部......
  • python基于django框架的医院分诊系统tp77r
    文章目录项目介绍具体实现截图开发技术系统性能核心代码部分展示源码/演示视频获取方式项目介绍本系统是基于MVC开发模式,通过多模块的设计,从而使同一个程序可以使用不同的表现形式。使用vue框架则让页面操作更灵活便捷。方便患者和医生查询、修改、添加、删除信息,实......
  • python基于django框架的健身房教练课程预约管理系统o3w2y
    文章目录项目介绍具体实现截图开发技术系统性能核心代码部分展示源码/演示视频获取方式项目介绍设计开发了具有管理员;个人中心、用户管理、健身教练管理、健身课程管理、健身知识管理、健身商品管理、预约教练管理、课程购买管理、健身交流、系统管理、订单管理,用户......