第三百一十八節,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 importrequest_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. 定義訊號模組
importdjango.dispatch
pizza_done
= django.dispatch.signal(providing_args=["
toppings
", "
size
"]) #定義乙個訊號,觸發時必須傳兩個引數
b. 註冊訊號
defcallback(sender, **kwargs):
print("
callback")
(sender,kwargs)
pizza_done.connect(callback)
c. 觸發訊號
from 路徑 importpizza_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...