我需要为我的项目的每个应用程序有单独的信号.但在其中一个应用程序中保存模型后,所有应用程序都会触发信号,所以我复制了信号中的信息.为Django项目的不同应用程序设置信号的正确方式是什么?
我的app1的signals.py:
# -*- coding: utf-8 -*-
import logging
from django.db.models.signals import post_save
from django.dispatch import receiver
from .models import *
@receiver(post_save)
def log_app1_updated_added_event(sender, **kwargs):
'''Writes information about newly added or updated objects of app1 into log file'''
logger = logging.getLogger(__name__)
app1_object = kwargs['instance']
if kwargs['created']:
logger.info(f'added {app1_object }')
else:
logger.info(f'updated {app1_object }')
我的应用程序2的Signals.py:
# -*- coding: utf-8 -*-
import logging
from django.db.models.signals import post_save
from django.dispatch import receiver
from .models import *
@receiver(post_save)
def log_app2_updated_added_event(sender, **kwargs):
'''Writes information about newly added or updated objects of app2 into log file'''
logger = logging.getLogger(__name__)
app2_object = kwargs['instance']
if kwargs['created']:
logger.info(f'added {app2_object }')
else:
logger.info(f'updated {app2_object }')
apps.py of my app1:
from django.apps import AppConfig
class App1Config(AppConfig):
name = 'App1'
def ready(self):
from app1 import signals
我的app2的apps.py:
from django.apps import AppConfig
class App1Config(AppConfig):
name = 'App2'
def ready(self):
from app2 import signals
下面是我的项目settings.py中的记录器部分
'loggers': {
'django': {
'handlers': ['console',],
'propagate': False,
'level': 'INFO',
},
'app1.signals': {
'handlers': ['console', 'file'],
'level': 'INFO',
},
'app2.signals': {
'handlers': ['console', 'file'],
'level': 'INFO',
},
}