django開發-signals訊號的使用

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函式

django開發-signals訊號的使用

1。2 test01/views。py中定義檢視

django開發-signals訊號的使用

1。3 配置

test01/apps。py:

django開發-signals訊號的使用

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/

列印的結果分別是:

django開發-signals訊號的使用

透過上面的結果,我們也可以看出訊號中使用和不使用sender引數區別。

2。自定義訊號

下面介紹下自定義訊號的使用。

2。1 定義訊號

test01/signals/signals。py:

django開發-signals訊號的使用

2。2 在檢視中觸發自定義訊號

test01/views。py:

django開發-signals訊號的使用

2。3 編寫處理函式,即收到訊號後要做哪些操作

test01/signals/handler。py:

django開發-signals訊號的使用

2。4 配置,與內建訊號中的配置相同

2。5 請求下面的url

http://127。0。0。1:8000/test01/signal/

看到列印的結果如下:

my signal: signal_view {‘signal’: , ‘p1’: ‘wyzane’, ‘p2’: 18}

3。補充

我們配置的時候使用了AppConfig,下面補充下AppConfig的知識。

AppConfig是用來設定每個app屬性的,上面的配置中定義了一個Test01AppConfig類來繼承AppConfig,並在__

init__

。py中使用default_app_config來載入這個類。

重寫在ready方法中的程式碼會在django執行的時候執行。

感興趣的小夥伴可以看下官方文件的介紹:

https://docs。djangoproject。com/en/2。1/ref/applications/

今天就介紹到這裡,如有問題歡迎私信交流。