引出:
想對每個增加數(shù)據(jù)給寫條日志姐扮。
Django中提供了“信號調度”,用于在框架執(zhí)行操作時解耦组橄。通俗來講,就是一些動作發(fā)生的時候罚随,信號允許特定的發(fā)送者去提醒一些接受者玉工。
信號分類
1.Django內置信號
Model signals
pre_init # django的modal執(zhí)行其構造方法前,自動觸發(fā)
post_init # django的modal執(zhí)行其構造方法后淘菩,自動觸發(fā)
pre_save # django的modal對象保存前遵班,自動觸發(fā)
post_save # django的modal對象保存后,自動觸發(fā)
pre_delete # django的modal對象刪除前潮改,自動觸發(fā)
post_delete # django的modal對象刪除后狭郑,自動觸發(fā)
m2m_changed # django的modal中使用m2m字段操作第三張表(add,remove,clear)前后,自動觸發(fā)
class_prepared # 程序啟動時汇在,檢測已注冊的app中modal類翰萨,對于每一個類,自動觸發(fā)
Management signals
pre_migrate # 執(zhí)行migrate命令前糕殉,自動觸發(fā)
post_migrate # 執(zhí)行migrate命令后亩鬼,自動觸發(fā)
Request/response signals
request_started # 請求到來前,自動觸發(fā)
request_finished # 請求結束后阿蝶,自動觸發(fā)
got_request_exception # 請求異常后雳锋,自動觸發(fā)
Test signals
setting_changed # 使用test測試修改配置文件時,自動觸發(fā)
template_rendered # 使用test測試渲染模板時羡洁,自動觸發(fā)
Database Wrappers
connection_created # 創(chuàng)建數(shù)據(jù)庫連接時魄缚,自動觸發(fā)
對于Django內置的信號,僅需注冊指定信號焚廊,當程序執(zhí)行相應操作時冶匹,自動觸發(fā)注冊函數(shù):
from django.core.signals import request_finished
from django.core.signals import request_started
from django.core.signals import got_request_exception
from django.db.models.signals import class_prepared
from django.db.models.signals import pre_init, post_init
from django.db.models.signals import pre_save, post_save
from django.db.models.signals import pre_delete, post_delete
from django.db.models.signals import m2m_changed
from django.db.models.signals import pre_migrate, post_migrate
from django.test.signals import setting_changed
from django.test.signals import template_rendered
from django.db.backends.signals import connection_created
def callback(sender, **kwargs):
print("xxoo_callback")
print(sender,kwargs)
xxoo.connect(callback)
# xxoo指上述導入的內容,比如pre_migrate
from django.core.signals import request_finished
from django.dispatch import receiver
@receiver(request_finished)
def my_callback(sender, **kwargs):
print("Request finished!")
2.自定義信號