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’: <django.dispatch.dispatcher.signal>, ‘p1’: ‘wyzane’, ‘p2’: 18}/<django.dispatch.dispatcher.signal>

3.補充

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

AppConfig是用來設置每個app屬性的,上面的配置中定義了一個Test01AppConfig類來繼承AppConfig,並在__init__.py中使用default_app_config來加載這個類。

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

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

https://docs.djangoproject.com/en/2.1/ref/applications/

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


分享到:


相關文章: