1. 程式人生 > >Python之路70-Django信號

Python之路70-Django信號

python

目錄

一、介紹

二、內置信號

三、自定義信號


一、介紹


Django中提供了"信號調度",用於在框架執行操作時解耦。通俗來講,就是一些動作發生的時候,信號允許特定的發送者去提醒一些接受者


二、內置信號


Django內置信號

Model signals
    pre_init                    # django的modal執行其構造方法前,自動觸發
    post_init                   # django的modal執行其構造方法後,自動觸發
    pre_save                    # django的modal對象保存前,自動觸發
    post_save                   # django的modal對象保存後,自動觸發
    pre_delete                  # django的modal對象刪除前,自動觸發
    post_delete                 # django的modal對象刪除後,自動觸發
    m2m_changed                 # django的modal中使用m2m字段操作第三張表(add,remove,clear)前後,自動觸發
    class_prepared              # 程序啟動時,檢測已註冊的app中modal類,對於每一個類,自動觸發
Management signals
    pre_migrate                 # 執行migrate命令前,自動觸發
    post_migrate                # 執行migrate命令後,自動觸發
Request/response signals
    request_started             # 請求到來前,自動觸發
    request_finished            # 請求結束後,自動觸發
    got_request_exception       # 請求異常後,自動觸發
Test signals
    setting_changed             # 使用test測試修改配置文件時,自動觸發
    template_rendered           # 使用test測試渲染模板時,自動觸發
Database Wrappers
    connection_created          # 創建數據庫連接時,自動觸發

對於Django內置的信號,僅需註冊指定信號,當程序執行響應操作時,自動觸發註冊函數

在工程下面建立一個名為sg.py的文件,然後在工程__init__.py中導入

import sg

這樣可以自動加載

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指上述導入的內容

views.py

from django.core.signals import request_finished
from django.dispatch import receiver

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


三、自定義信號


1.定義信號

import django.dispatch
pizza_done = django.dispatch.Signal(providing_args=["toppings", "size"])


2.註冊信號

def callback(sender, **kwargs):
    print("callback")
    print(sender,kwargs)
 
pizza_done.connect(callback)


3.觸發信號

from 路徑 import pizza_done
 
pizza_done.send(sender=‘seven‘,toppings=123, size=456)


由於內置信號的觸發者已經集成到Django中,所以其會自動調用,而對於自定義信號則學員開發者在任意位置觸發

本文出自 “八英裏” 博客,請務必保留此出處http://5921271.blog.51cto.com/5911271/1930264

Python之路70-Django信號