31 Jul 2023

Django Signals

To receive a signal, register a receiver function:

from django.core.signals import request_finished

def my_callback(sender, **kwargs)
    print("Request finished!")
request_finished.connect(my_callback)

or

@receiver
def my_callback(sender, **kwargs):
    print("Request finished!")

my_callback function will be called each time a request finishes.

Connect to signals sent by specific senders

@receiver
def my_handler(sender, sender=MyModel):
    print("Request finished!")

The method will be called when an instance of MyModel is saved

Defining and sending signals

task_done = django.dispatch.Signal()

def send_task_signal(self, task_name):
    task_done.send(sender=self.__class__, task_name=task_name)

Disconnecting from a signal

To disconnect from a signal simply use:

Signal.disconnect()