Slide 1

Slide 1 text

SIGNALS AND APPCONFIG DJUGL October 6, 2015

Slide 2

Slide 2 text

@anabalica

Slide 3

Slide 3 text

Let’s get schwifty with !

Slide 4

Slide 4 text

from django.db.models.signals import post_save from django.dispatch import receiver from myapp.models import MyModel @receiver(post_save, sender=MyModel) def my_handler(sender, **kwargs): pass # my_app/signals.py

Slide 5

Slide 5 text

from django.db.models.signals import pre_save from django.dispatch import receiver from myapp.models import MyModel @receiver(pre_save, sender=MyModel) def my_handler(sender, **kwargs): pass # my_app/signals.py

Slide 6

Slide 6 text

Django<1.7? make sure that the module it’s in gets imported early on so that the signal handling gets registered before any signals need to be sent

Slide 7

Slide 7 text

Django<1.7? make sure that the module it’s in gets imported early on so that the signal handling gets registered before any signals need to be sent

Slide 8

Slide 8 text

Django<1.7? this makes your app’s models.py a good place to put registration of signal handlers

Slide 9

Slide 9 text

from django.db import models from my_app import signals class MyModel(models.Model): pass # my_app/models.py

Slide 10

Slide 10 text

No content

Slide 11

Slide 11 text

CIRCULAR IMPORTS

Slide 12

Slide 12 text

from my_app import signals # my_app/__init__.py

Slide 13

Slide 13 text

No content

Slide 14

Slide 14 text

AppConfig to the rescue

Slide 15

Slide 15 text

AppConfig is a registry of installed apps and available models

Slide 16

Slide 16 text

>>> from django.apps import apps >>> apps.get_app_config('admin').verbose_name 'Admin'

Slide 17

Slide 17 text

from django.apps import AppConfig class RickNMortyConfig(AppConfig): name = "rick_n_morty" verbose_name = "Rick and Morty" # my_app/apps.py

Slide 18

Slide 18 text

INSTALLED_APPS = [ "my_app.apps.RickNMortyConfig", # ... ] # settings.py or default_app_config = "my_app.apps.RickNMortyConfig" # my_app/__init__.py

Slide 19

Slide 19 text

No content

Slide 20

Slide 20 text

from django.apps import AppConfig class RickNMortyConfig(AppConfig): name = "rick_n_morty" verbose_name = "Rick and Morty” def ready(self): from my_app import signals # my_app/apps.py

Slide 21

Slide 21 text

• Loads the settings • Sets up logging • Initializes the application registry

Slide 22

Slide 22 text

• Imports each item from INSTALLED_APPS • Imports the models submodule if exists • Runs the ready() method of each app config

Slide 23

Slide 23 text

No content