We are going to look at how Django signals work in this tutorial. Signals allow certain senders to notify a set of receivers that some action has taken place.
We will focus on the post_save signal in this tutorial, you can checkout a list of all signals here list of all signals
Assume you have a simple app to record book name and pages, a model for that app might look as shown below
name = models.CharField(max_length=50)
pages = models.CharField(max_length=50)
Now assume you want to do something once a new book entry has been added to the database, how do you do that ? this is where signals come in.
HOW TO USE SIGNALS
Create a new file named signals.py in our app on the same level as models.py file.
from django.db.models.signals import post_save
from django.dispatch import receiver
from mysite.models import Book
def Notify_if_book_is_saved(sender, **kwargs):
print("New book saved.")
The Notify_if_book_is_saved is our receiver function which will only be called when an instance of Book is saved, It simply prints " New book saved. " once a new book is saved.
Notice that our function takes a sender argument and keyword arguments (**kwargs); all signal handlers must take these arguments.
if keyword arguments (**kwargs) is new to you checkout my tutorial on that what are python args and kwargs
We can check whether an instance of Book was saved using if kwargs['created']:
created is a boolean sent to the receiver function as a keyword argument by post_save signal, checkout other arguments that are sent by post_save signal here Arguments sent with post_save signal
Modify your app.py as follows
from django.apps import AppConfig
name = 'mysite'
verbose_name = "Mysite"
The next step will depend of the version of Django you are using.
if you are using Django 1.8+ , the documentation says that
New applications should avoid
default_app_config.Instead they should require the dotted path to the appropriate
AppConfigsubclass to be configured explicitly in
INSTALLED_APPS = [
For older versions of Django set the
default_app_config variable as shown below inside __init__ .py file on same level as models.py .
default_app_config = 'mysite.apps.MysiteConfig'
GET SOURCE CODE
- Simple YouTube Clone Created With Python And Django
- Difference between Django forms.Form and forms.ModelForm
- Why the name of this blog is Sayari3