django中訊號
阿新 • • 發佈:2021-11-27
# 訊號的理解 在某個行為進行的某個階段給這個行為新增一個附帶的行為 # 相關api ## 資料表 pre_init # django的model執行其構造方法前,自動觸發 post_init # django的model執行其構造方法後,自動觸發 pre_save # djangod的model物件儲存前,自動觸發 post_save # django的model物件儲存後,自動觸發 pre_delete # django的model物件刪除前,自動觸發 post_delete # django的model物件刪除後,自動觸發 m2m_changed # django的model中使用m2m欄位操作第三表(add,remove,clear)前後,自動觸發 class_prepared # 程式啟動時,檢測已註冊的app中的model類,對於每一個類,自動觸發 ## migrate命令 pre_migrate # 執行migrate前,觸發 post_migrate # 執行migrate後,觸發 ## url請求相關 request_started # 請求到來前,觸發 request_finished # 請求結束後,觸發 got_request_exception # 請求異常後,觸發 ## 測試 setting_changed # 使用test測試修改配置檔案,觸發 template_rendered # 使用test測試渲染模板時,觸發 ## 資料庫 connection_created # 建立資料庫連線時,觸發 # 實際應用 from django.db.models.signals import pre_save from django.dispatch import receiver @receiver(pre_save) def do_something(sender, **kwargs): print("i'am doing it now!") 上面例子通過receiver裝飾器將do_something函式新增到了sender物件在儲存之前必須做的事情的清單裡面,也就是說任何一個sender物件在被儲存進資料庫之前肯定會在後臺列印一句i'am doing it now! 可能這裡對sender具體指的誰不是很明確,這裡明確強調下,如果receiver裝飾器中沒有額外對sender引數進行宣告,sender代表當前app下的所有資料模型 既然說了receiver中也可以指定引數,那就是說訊號也是可以針對某些具體的資料模型進行訊號接受的 from django.db.models.signals import pre_save from django.dispatch import receiver from myapp.models import MyModel @receiver(pre_save, sender=MyModel) # pre_save指定訊號觸發型別,sender指定只有MyModel模型發出的訊號會被receiver接受並執行下面邏輯 def my_handler(sender, **kwargs): ...
-------------------------------------------
個性簽名:程式碼過萬,鍵盤敲爛!!!
如果覺得這篇文章對你有小小的幫助的話,記得在右下角點個“推薦”哦,博主在此感謝!