django-信號

Django中提供了“信號調(diào)度”,用于在框架執(zhí)行操作時解耦。通俗來講,就是一些動作發(fā)生的時候,信號允許特定的發(fā)送者去提醒一些接受者。

Django內(nèi)置信號

Model signals
    pre_init                    # django的model執(zhí)行其構造方法前,自動觸發(fā)
    post_init                   # django的model執(zhí)行其構造方法后,自動觸發(fā)
    pre_save                    # django的model對象保存前,自動觸發(fā)
    post_save                   # django的model對象保存后,自動觸發(fā)
    pre_delete                  # django的model對象刪除前,自動觸發(fā)
    post_delete                 # django的model對象刪除后,自動觸發(fā)
    m2m_changed                 # django的model中使用m2m字段操作第三張表(add,remove,clear)前后,自動觸發(fā)
    class_prepared              # 程序啟動時,檢測已注冊的app中model類,對于每一個類,自動觸發(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內(nèi)置的信號,僅需注冊指定信號,當程序執(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指上述導入的內(nèi)容
from django.core.signals import request_finished
from django.dispatch import receiver

@receiver(request_finished)
def my_callback(sender, **kwargs):
    print("Request finished!")

自定義信號

import django.dispatch
# 定義信號
pizza_done = django.dispatch.Signal(providing_args=["toppings", "size"])

def callback(sender, **kwargs):
    print("callback")
    print(sender,kwargs)
#  注冊信號 
pizza_done.connect(callback)

# 觸發(fā)信號
pizza_done.send(sender='seven',toppings=123, size=456)

由于內(nèi)置信號的觸發(fā)者已經(jīng)集成到Django中,所以其會自動調(diào)用,而對于自定義信號則需要開發(fā)者在任意位置觸發(fā)。

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • 引出:想對每個增加數(shù)據(jù)給寫條日志。 Django中提供了“信號調(diào)度”,用于在框架執(zhí)行操作時解耦。通俗來講,就是一些...
    廖馬兒閱讀 656評論 0 0
  • 知識點 概念 如何監(jiān)聽信號 Django內(nèi)置信號 自定義信號 使用Django內(nèi)置信號 概念 Django 提供一...
    Spareribs閱讀 3,654評論 0 5
  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,502評論 19 139
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,716評論 25 709
  • 最后我們選擇了什么樣的路 最后的我們會在哪里 最后的我們選擇了誰 最后的我們還會遇見嗎 今天沒有陽光,是我喜歡的...
    變優(yōu)秀向你靠近閱讀 226評論 0 0

友情鏈接更多精彩內(nèi)容