django中提供了訊號機制,我們可以自定義需要執行的函式,當某個動作(如model物件被儲存)發生時,可以觸發自定義函式的執行。
django中有內建的訊號,我們也可以自定義訊號。
django中有以下常用內建訊號:
django。db。models。signals。pre_save 在某個Model儲存之前呼叫django。db。models。signals。post_save 在某個Model儲存之後呼叫django。db。models。signals。pre_delete 在某個Model刪除之前呼叫django。db。models。signals。post_delete 在某個Model刪除之後呼叫django。core。signals。request_started 在建立Http請求時傳送django。core。signals。request_finished 在關閉Http請求時傳送
其他內建訊號可以檢視官方文件:
https://docs。djangoproject。com/en/2。1/topics/signals/
下面介紹下內建訊號和自定義訊號的使用。
1。內建訊號
下面舉一個post_save的例子,test01是app名稱。
1。1 首先在test01/signals/handler。py中定義signal函式
1。2 test01/views。py中定義檢視
1。3 配置
test01/apps。py:
test01/__
init__
。py:
default_app_config = ‘test01。apps。Test01AppConfig’
1。4 此時在postman中分別請求下面兩個url:
http://127。0。0。1:8000/test01/user/
http://127。0。0。1:8000/test01/student/
列印的結果分別是:
透過上面的結果,我們也可以看出訊號中使用和不使用sender引數區別。
2。自定義訊號
下面介紹下自定義訊號的使用。
2。1 定義訊號
test01/signals/signals。py:
2。2 在檢視中觸發自定義訊號
test01/views。py:
2。3 編寫處理函式,即收到訊號後要做哪些操作
test01/signals/handler。py:
2。4 配置,與內建訊號中的配置相同
2。5 請求下面的url
http://127。0。0。1:8000/test01/signal/
看到列印的結果如下:
my signal: signal_view {‘signal’:
3。補充
我們配置的時候使用了AppConfig,下面補充下AppConfig的知識。
AppConfig是用來設定每個app屬性的,上面的配置中定義了一個Test01AppConfig類來繼承AppConfig,並在__
init__
。py中使用default_app_config來載入這個類。
重寫在ready方法中的程式碼會在django執行的時候執行。
感興趣的小夥伴可以看下官方文件的介紹:
https://docs。djangoproject。com/en/2。1/ref/applications/
今天就介紹到這裡,如有問題歡迎私信交流。