The Signal class allows certain senders to notify a set of receivers that some action has taken place across Django apps within the same project.
django-simple-history is a code library that stores Django model state to track history, view and revert changes via the Django admin site. It is open source under the BSD 3-Clause "New" or "Revise" License.
django-simple-history / simple_history / signals.py
# signals.py
import django.dispatch
pre_create_historical_record = django.dispatch.Signal(
providing_args=[
"instance",
"history_instance",
"history_date",
"history_user",
"history_change_reason",
"using",
]
)
post_create_historical_record = django.dispatch.Signal(
providing_args=[
"instance",
"history_instance",
"history_date",
"history_user",
"history_change_reason",
"using",
]
)
aldryn-accounts is a code library for user registration and authentication in Django projects. The code for this project is open source under the MIT license.
aldryn-accounts / aldryn_accounts / signal.py
# -*- coding: utf-8 -*-
import django.dispatch
from django.contrib.auth import user_logged_in
from django.db.models import signals, ObjectDoesNotExist
from django.utils.encoding import force_text
from django.utils import timezone
from django.contrib.auth.models import User
from .utils import generate_username
user_signed_up = django.dispatch.Signal(providing_args=["user", "form"])
user_sign_up_attempt = django.dispatch.Signal(providing_args=["username", "email", "result"])
signup_code_sent = django.dispatch.Signal(providing_args=["signup_code"])
signup_code_used = django.dispatch.Signal(providing_args=["signup_code_result"])
email_confirmed = django.dispatch.Signal(providing_args=["email_address"])
email_confirmation_sent = django.dispatch.Signal(providing_args=["confirmation"])
password_changed = django.dispatch.Signal(providing_args=["user"])
# code continues from here without any further django.dispatch.Signal references
django-easy-timezones (project website) is a Django middleware code library to simplify handling time data in your applications using users' geolocation data.
django-easy-timezones / easy_timezones / signals.py
# Django
import django.dispatch
detected_timezone = django.dispatch.Signal(providing_args=["instance", "timezone"])
viewflow (project website) is a reusable workflow code library for organizing business logic in a complex web application. The code for the project is available under the GNU Alfredo license.
viewflow / viewflow / signals.py
# signals.py
from django.dispatch import Signal
flow_started = Signal(providing_args=["process", "task"])
flow_finished = Signal(providing_args=["process", "task"])
task_started = Signal(providing_args=["process", "task"])
task_failed = Signal(providing_args=["process", "task", "exception",
"traceback"])
task_finished = Signal(providing_args=["process", "task"])
django-registration (redux) (project documentation) is a Django code library for one-phase, two-phase and three-phase registration flows. The code is available open source.
django-registration / registrations / signals.py
from django.conf import settings
from django.contrib.auth import get_backends
from django.contrib.auth import login
from django.dispatch import Signal
# An admin has approved a user's account
user_approved = Signal(providing_args=["user", "request"])
# A new user has registered.
user_registered = Signal(providing_args=["user", "request"])
# A user has activated his or her account.
user_activated = Signal(providing_args=["user", "request"])
def login_user(sender, user, request, **kwargs):
""" Automatically authenticate the user when activated """
backend = get_backends()[0] # Hack to bypass `authenticate()`.
user.backend = "%s.%s" % (backend.__module__, backend.__class__.__name__)
login(request, user)
request.session['REGISTRATION_AUTO_LOGIN'] = True
request.session.modified = True
if getattr(settings, 'REGISTRATION_AUTO_LOGIN', False):
user_activated.connect(login_user)
django-cors-headers is an open source library for enabling Cross-Origin Resource Sharing (CORS) handling in your Django web applications and appropriately dealing with HTTP headers for CORS requests.
django-cors-headers / src / corsheaders / signals.py
from django.dispatch import Signal
# If any attached handler returns Truthy, CORS will be allowed for the request.
# This can be used to build custom logic into the request handling when the
# configuration doesn't work.
check_request_enabled = Signal(providing_args=["request"])