Django信号系统简介

本文介绍了Django的信号系统,包括创建信号、指定信号发送者和信号监听。当特定事件发生时,信号系统允许发送者向接收者发送通知。通过示例展示了如何定义信号、发送信号以及设置监听回调函数来处理接收到的信号。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

# django信号系统

django自带一套信号发射系统来帮助我们在框架的不同位置传递信息.也就是说,当某一事件发生时,信号系统可以允许一个或多个发送者(senders)将通知或信号(signals)推送给一组接受者(receivers).信号系统在我们多处代码与同一个事件相关是特别有用.

既然是信号系统,那么必须包含以下要素:

 1. 发送者-谁发送了信号

 2. 信号-发送的信号本身

 3. 接收者-信号是发给谁的

创建信号

想要发送信号,必须先要创建一个信号,在django中,信号是django.dispatch.Signal类的实例,该类的构造函数接受一个名叫providing_args参数,该参数是参数名列表,举例如下:


import django.dispatch

game_start = django.dispatch.Signal(providing_args=['player',  'level'])

该段代码的意思是,生成一个在游戏开始时发送的信号,信号包含两个参数,游戏者,关卡.

指定信号发送者

有了信号,我们要确定信号是谁发送出去的,这个时候就要用到“`Signal.send(sender, **kwargs)方法了.代码示例以及解释如下:


class Game(object):

    def start(self, user, level):

        game_start.send(sender=self.__class__, player=user, level=level)

        ......

以上代码的意思是,在游戏启动的时候,游戏实例会发送一个之前定义的信号.信号包含了游戏者和关卡的信息.

信号监听

由于信号接受方不知道信号什么时候会传递过来,所以接收方一般是在做持续监听,收到信号就触发反应,没收到就一直待机.因此我们需要一个负责监听的方法.这个方法是Signal.connect(receiver, sender=None, weak=True, dispatch_uid=None)

现在来解释一下最基本的参数:

  1. receiver: 信号接受者,回调函数

  2. sender: 信号发送者

示例:


game_start.connect(game_logger)

开启监听之后,就要去实现回调函数了


def game_logger():

    # log to log file

    print 'Done!'

流程解释

  1. 首先我们创建了一个在游戏开始是发出的信号

  2. 在游戏开始时让指定的发送者发出信号

  3. 接受端一直处于监听状态,收到信号,调用回调函数,将游戏者和关卡信息写入日志

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值