Signals demo

This commit is contained in:
Scot Hacker 2019-04-23 23:27:04 -07:00
parent befc7ad2cd
commit 470e471678
2 changed files with 30 additions and 0 deletions

24
todo/signals.py Normal file
View file

@ -0,0 +1,24 @@
import django.dispatch
from django.dispatch import receiver
from todo.utils import toggle_task_completed
# ### REGISTER SIGNALS ###
# Demonstrates registering a custom signal
pizza_done = django.dispatch.Signal(providing_args=["toppings", "size", "task_id"])
# ### HANDLE SIGNALS ###
# Demonstrates receiving a custom signal
# (which in turn calls an existing todo function, but could do anything)
@receiver(pizza_done)
def toggle_task_handler(sender, **kwargs):
print(sender)
print(kwargs)
task_id = kwargs.get("task_id")
results = toggle_task_completed(task_id)
print(results)
print("Request finished!")

View file

@ -9,6 +9,7 @@ from todo.forms import SearchForm
from todo.models import Task, TaskList
from todo.utils import staff_check
from todo.signals import pizza_done
@login_required
@user_passes_test(staff_check)
@ -16,6 +17,11 @@ def list_lists(request) -> HttpResponse:
"""Homepage view - list of lists a user can view, and ability to add a list.
"""
# Demonstrates sending a custom signal from elsewhere in the project.
# In this case when the list of lists is viewed, I'm going to toggle
# the "completed" state of task 150 (just for example's sake).
pizza_done.send(sender="foobar", toppings=["anchovies", "parmesan"], size=7, task_id=150)
thedate = datetime.datetime.now()
searchform = SearchForm(auto_id=False)