django 信号(singals)详解
Django内部包含了一位“信号调度员”:当某事件在框架内发生时,它可以通知到我们的应用程序。 简而言之,当event(事件)发生时,signals(信号)允许若干 senders(寄件人)通知一组 receivers(接收者)。这在我们多个独立的应用代码对同一事件的发生都感兴趣时,特别有用。 django信号(singals)应用范围:
应用案例:
django 的 signal 使用可分为2个模块:
内建signal的使用 django 内部有些定义好的signal供我们使用: 模型相关:
请求相关:
django信号简单使用(django==2.1.1) 1.信号定义 所有信号都是django.core.signals.Singal的实例,providing_args是一个列表,由信号提供监听者的参数名称组成 #?两种引用方式 from?django.core.signals?import?Signal from?django.dispatch?import?Signal #?定义邮件发送信号 email_send?=?Singal(providing_args=['email']) 2.信号处理函数 from?django.dispatch?import?Signal,?receiver #?定义邮件发送信号 email_send?=?Singal(providing_args=['email']) #?处理函数 @receiver(email_send?) def?send_email(sender,?**kwargs): ????"""发送邮件处理函数""" ????print("email_send信号处理函数被调用") 3.信号连接 信号连接就是将信号和处理函数连接起来,信号连接一般是在子应用配置类的ready方法进行操作 class?TestAppConfig(object): ????def?ready(self): ????????#?信号连接 ????????email_send.connect(send_email) 4.自定义信号 from?django.dispatch?import?Signal,receiver #?定义邮件发送信号 email_send?=?Singal(providing_args=['email']) #?处理函数 @receiver(email_send?) def?send_email(sender,?**kwargs): ????"""发送邮件处理函数""" ????print("email_send信号处理函数被调用") ???? #?调用信号函数 class?Test(Object): ????"""?其他具体代码""" ???? ????#?调用邮件发送信号 ????send_email(sender=self.__class__,username=username) 文档: https://docs.djangoproject.com/en/1.11/topics/signals/ https://segmentfault.com/a/1190000008455657 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |