Applications include some combination of models, views, templates, template tags, static files, URLs, middleware, etc. They’re generally wired into projects with the INSTALLED_APPS setting and optionally with other mechanisms such as URLconfs, the MIDDLEWARE_CLASSES setting, or template inheritance.
The power of this feature is that it allows you to create an application configuration class which has a ready method, allowing you to perform initialization tasks such as registering signals when the application first loads.
To get started with applications, set the default_app_config variable in your application’s __init__.py:
|default_app_config = 'myapp.apps.MyAppConfig'|
Now create a new file called apps.py in the root of your application and create a class that inherits from AppConfig:
|from django.apps import AppConfig|
|name = 'myapp'|
|verbose_name = 'My App'|
|# import signal handlers|
Within this class you can define a variety of things including the application’s name, verbose name and the ready method. In the example above, I’m importing the signals submodule that contains the signal receivers (in Django 1.6 and below, signal registration usually happened in the models module).
Finally, here’s an example signal and handler from my signals submodule:
|from django.dispatch import Signal|
|example_signal = Signal(providing_args=['arg1', 'arg2'])|
|from django.dispatch import receiver|
|from .signals import example_signal|
|def example_signal_handler(sender, **kwargs):|