第三百一十八節,Django框架,訊號

2022-09-15 03:24:10 字數 3541 閱讀 3010

第三百一十八節,django框架,訊號

django中提供了「訊號排程」,用於在框架執行操作時解耦。通俗來講,就是一些動作發生的時候,訊號允許特定的傳送者去提醒一些接受者。

也就是當程式有指定動作時,觸發乙個訊號函式

1、django內建訊號

model signals  #資料庫操作時

pre_init

#django的modal執行其構造方法前,自動觸發

post_init #

django的modal執行其構造方法後,自動觸發

pre_s**e #

django的modal物件儲存前,自動觸發

post_s**e #

django的modal物件儲存後,自動觸發

pre_delete #

django的modal物件刪除前,自動觸發

post_delete #

django的modal物件刪除後,自動觸發

m2m_changed #

django的modal中使用m2m欄位操作第三張表(add,remove,clear)前後,自動觸發

class_prepared #

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測試渲染模板時,自動觸發

connection_created

#建立資料庫連線時,自動觸發

訊號的使用

1、在__init__.py匯入訊號模組

2、自定義訊號執行函式

3、將訊號執行函式註冊到訊號

注意:

1、自定義訊號執行函式,有兩個固定引數sender, **kwargs

sender:返回觸發訊號執行函式的,物件或方法

kwargs:觸發訊號執行函式的,物件或方法傳過來的資料

connect()註冊訊號執行函式到訊號裡

使用方式:

訊號名稱.connect(自定義訊號執行函式名稱)

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_s**e, post_s**e

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

defcallback(sender, **kwargs): #

自定義訊號函式

print("

執行訊號函式")

#print(sender) #列印觸發訊號的物件或方法

#print(kwargs) #觸發者傳過來的資料

request_started.connect(callback)

#將自定義訊號函式註冊到訊號

2、自定義訊號

自定義訊號需要我們手動觸發

a. 定義訊號模組

import

django.dispatch

pizza_done

= django.dispatch.signal(providing_args=["

toppings

", "

size

"]) #定義乙個訊號,觸發時必須傳兩個引數

b. 註冊訊號

def

callback(sender, **kwargs):

print("

callback")

print

(sender,kwargs)

pizza_done.connect(callback)

c. 觸發訊號

from 路徑 import

pizza_done

pizza_done.send(sender='

seven

',toppings=123, size=456)

一百一十八

隨著 it 技術的發展與普及,各類資訊化系統正日趨成為工業製造領域不可或缺的基礎能力,推動著業務部門 工廠產線的高效執行,因此對資訊化系統的高質量運維,是工業製造企業保持高效生產的關鍵。傳統上,企業 it 運維是通過系統指標的變化,例如處理器 記憶體使用率 磁碟吞吐量等,由人工判斷系統是否存在問題與...

PHP 一百一十八 中文數字轉換成陣列

function a v 在第一位的時候 就 1 保證值不變 不會出現執行異常 if strpos v,0 在最後一位時 變成 0 保證值不變 if strripos v,strlen v 1 v sum v.eval v return sum return v vars explode 一,二,十...

左耳聽風 第三十八周

每週完成乙個arts 每週至少做乙個 leetcode 的演算法題 閱讀並點評至少一篇英文技術文章 學習至少乙個技術技巧 分享一篇有觀點和思考的技術文章。也就是 algorithm review tip share 簡稱arts 繼續按順序來完成 leetcode 前 200 題,以下為個人題解 l...