最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Django中信號(hào)signals的簡(jiǎn)單使用方法

 更新時(shí)間:2019年07月04日 10:42:49   作者:如何好聽(tīng)  
這篇文章主要給大家介紹了關(guān)于Django中信號(hào)signals的簡(jiǎn)單使用方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Django具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

正文

在平時(shí)的開(kāi)發(fā)過(guò)程中,我們會(huì)遇到一些特殊的應(yīng)用場(chǎng)景,如果你想要在執(zhí)行某種操作之前或者之后你能夠得到通知,并對(duì)其進(jìn)行一些你想要的操作時(shí),你就可以用Django中的信號(hào)(signals)。Django 提供一個(gè)“信號(hào)分發(fā)器”,允許解耦的應(yīng)用在框架的其它地方發(fā)生操作時(shí)會(huì)被通知到,也就是說(shuō)在特定事件發(fā)生時(shí),可以發(fā)送一個(gè)信號(hào)去通知所有注冊(cè)了這個(gè)信號(hào)的回調(diào),在回調(diào)里進(jìn)行想要的操作處理。

一.Django內(nèi)置信號(hào)

Django內(nèi)置了對(duì)數(shù)據(jù)表,migrate命令,url請(qǐng)求相關(guān)(request/response),使用test測(cè)試,連接數(shù)據(jù)庫(kù)五大類(lèi)信號(hào)。

Model signals
 pre_init   # model執(zhí)行構(gòu)造方法前,觸發(fā)
 post_init   # model執(zhí)行構(gòu)造方法后,觸發(fā)
 pre_save   # model執(zhí)行save對(duì)象保存前,觸發(fā)
 post_save   # model執(zhí)行save對(duì)象保存前,觸發(fā)
 pre_delete   # model執(zhí)行delete對(duì)象刪除前,觸發(fā)
 post_delete   # model執(zhí)行delete對(duì)象刪除前,觸發(fā)
 m2m_changed   # model使用多對(duì)多字段操作第三張表前后,觸發(fā)
 class_prepared  # 程序啟動(dòng)時(shí),檢測(cè)已注冊(cè)的model類(lèi),對(duì)每個(gè)類(lèi),觸發(fā)

Management signals
 pre_migrate   # 執(zhí)行migrate前,觸發(fā)
 post_migrate   # 執(zhí)行migrate后,觸發(fā)

Request/response signals
 request_started  # 請(qǐng)求到來(lái)前,觸發(fā)
 request_finished  # 請(qǐng)求結(jié)束后,觸發(fā)
 got_request_exception # 請(qǐng)求異常后,觸發(fā)

Test signals
 setting_changed  # 使用test測(cè)試修改配置文件,觸發(fā)
 template_rendered  # 使用test測(cè)試渲染模板時(shí),觸發(fā)

Database Wrappers
 connection_created  # 創(chuàng)建數(shù)據(jù)庫(kù)連接時(shí),觸發(fā)

1.常用內(nèi)置信號(hào)參數(shù)介紹

(1)django.db.models.signals.pre_save

pre_save處理程序的參數(shù)介紹

參數(shù)名 參數(shù)介紹
sender 模型類(lèi)
instance 保存的實(shí)際實(shí)例(保存后的model數(shù)據(jù)對(duì)象)
raw 布爾值; True如果模型完全按照提供的方式保存。不應(yīng)該查詢/修改數(shù)據(jù)庫(kù)中的其他記錄,因?yàn)閿?shù)據(jù)庫(kù)可能尚未處于一致?tīng)顟B(tài)
using 正在使用的數(shù)據(jù)庫(kù)別名
update_fields 要傳遞給更新的字段集model.save(),或者None 如果update_fields未傳遞給它save()

(2)django.db.models.signals.post_save

post_save處理程序的參數(shù)介紹

參數(shù)名 參數(shù)介紹
sender 模型類(lèi)
instance 保存的實(shí)際實(shí)例
created 布爾值; True如果創(chuàng)建了新記錄(True表示數(shù)據(jù)創(chuàng)建)
raw 布爾值; True如果模型完全按照提供的方式保存。不應(yīng)該查詢/修改數(shù)據(jù)庫(kù)中的其他記錄,因?yàn)閿?shù)據(jù)庫(kù)可能尚未處于一致?tīng)顟B(tài)
using 正在使用的數(shù)據(jù)庫(kù)別名
update_fields 要傳遞給更新的字段集model.save(),或者None 如果update_fields未傳遞給它save()

(3)django.db.models.signals.pre_delete

pre_delete處理程序的參數(shù)介紹

參數(shù)名 參數(shù)介紹
sender 模型類(lèi)
instance 要?jiǎng)h除的實(shí)際實(shí)例
using 正在使用的數(shù)據(jù)庫(kù)別名

(4)django.db.models.signals.post_delete

post_delete處理程序的參數(shù)介紹

參數(shù)名 參數(shù)介紹
sender 模型類(lèi)
instance 要?jiǎng)h除的實(shí)際實(shí)例(該對(duì)象將不再存在于數(shù)據(jù)庫(kù)中,因此請(qǐng)謹(jǐn)慎對(duì)待此實(shí)例)
using 正在使用的數(shù)據(jù)庫(kù)別名

更多信號(hào)參數(shù)介紹請(qǐng)參考https://docs.djangoproject.com/zh-hans/2.1/ref/signals/

2.內(nèi)置信號(hào)監(jiān)聽(tīng)方法

對(duì)于Django內(nèi)置的信號(hào),僅需注冊(cè)指定信號(hào),當(dāng)程序執(zhí)行相應(yīng)操作時(shí),自動(dòng)觸發(fā)注冊(cè)函數(shù)。當(dāng)你寫(xiě)好一個(gè)接收器(receiver function)用于接收到信號(hào)以后的回調(diào)處理后,就需要將接收器連接到信號(hào),有兩種方法,手動(dòng)連接,跟使用receiver裝飾器的方式。

手動(dòng)連接實(shí)現(xiàn)方法:

from django.db.models.signals import post_delete

def my_callback(sender, **kwargs):
 print(sender)
 print("信號(hào)已接收")

post_delete.connect(my_callback) # 信號(hào)連接接收器,用于收到信號(hào)的回調(diào),如果想要指定某個(gè)表對(duì)象,直接指定sender

# connect參數(shù)接收
"""
receiver - 將連接到此信號(hào)的回調(diào)函數(shù)。回調(diào)函數(shù)名,不帶括號(hào)
sender - 指定從中接收信號(hào)的特定發(fā)送方。
weak - Django默認(rèn)將信號(hào)處理程序存儲(chǔ)為弱引用。因此,如果您的接收器是本地功能,它可能被垃圾收集。為了防止這種情況,請(qǐng)weak=False在調(diào)用信號(hào)connect()方法時(shí)通過(guò)。
dispatch_uid - 在可能發(fā)送重復(fù)信號(hào)的情況下信號(hào)接收器的唯一標(biāo)識(shí)符。
"""

receiver裝飾器實(shí)現(xiàn)方法:

from django.dispatch import receiver
from django.db.models.signals import post_delete
from app.models import UCenter

@receiver(post_delete, sender=UCenter) # post_delete指定信號(hào)觸發(fā)類(lèi)型,sender指定到具體對(duì)象
def delete_u2user(sender, instance, **kwargs): # instance表示被刪除的對(duì)象
 print(sender, instance)

更多信號(hào)操作相關(guān)問(wèn)題參考文檔https://docs.djangoproject.com/zh-hans/2.1/topics/signals/

二.自定義信號(hào)使用

 1.定義信號(hào)

from django.dispatch import Signal

test_signal = Signal(providing_args=["name", "age"]) # 聲明一個(gè)test_signal的信號(hào),提供給接收器name跟age兩個(gè)參數(shù)(可自定義參數(shù))

2.注冊(cè)信號(hào)

def my_callback(sender, **kwargs):
 print(sender)
 print("信號(hào)已接收")

test_signal.connect(my_callback) # 注冊(cè)信號(hào),指定接收器為my_callback

3.觸發(fā)信號(hào)

from xxx import test_signal

test_signal.send(sender='test', name='zzq', age='18') # 觸發(fā)信號(hào),發(fā)送name,age參數(shù)信息

當(dāng)然這樣在選擇發(fā)送信號(hào)的方式有兩種一種使用Signal.send,還有一種是Signal.send_robut。

send()與send_robust()處理接收器功能引起的異常的方式不同。

send()并不能捕獲由接收器提出的任何異常; 它只是允許錯(cuò)誤傳播。因此,在面對(duì)錯(cuò)誤時(shí),不是所有接收器都可以被通知信號(hào)。

send_robust()捕獲從Python Exception類(lèi)派生的所有錯(cuò)誤,并確保所有接收器都收到信號(hào)通知。如果發(fā)生錯(cuò)誤,則會(huì)在引發(fā)錯(cuò)誤的接收器的元組對(duì)中返回錯(cuò)誤實(shí)例。

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。

相關(guān)文章

  • Python實(shí)現(xiàn)自動(dòng)上傳文件到百度網(wǎng)盤(pán)

    Python實(shí)現(xiàn)自動(dòng)上傳文件到百度網(wǎng)盤(pán)

    這篇文章主要為大家詳細(xì)介紹了如何利用Python實(shí)現(xiàn)自動(dòng)上傳文件到百度網(wǎng)盤(pán)功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起了解一下
    2023-04-04
  • python批量修改圖片后綴的方法(png到j(luò)pg)

    python批量修改圖片后綴的方法(png到j(luò)pg)

    今天小編就為大家分享一篇python批量修改圖片后綴(png到j(luò)pg),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-10-10
  • 基于selenium及python實(shí)現(xiàn)下拉選項(xiàng)定位select

    基于selenium及python實(shí)現(xiàn)下拉選項(xiàng)定位select

    這篇文章主要介紹了基于selenium及python實(shí)現(xiàn)下拉選項(xiàng)定位select,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-07-07
  • Pandas數(shù)據(jù)結(jié)構(gòu)中Series屬性詳解

    Pandas數(shù)據(jù)結(jié)構(gòu)中Series屬性詳解

    本文主要介紹了Pandas數(shù)據(jù)結(jié)構(gòu)中Series屬性詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • 裝了python再裝anaconda該怎么操作保姆級(jí)教程

    裝了python再裝anaconda該怎么操作保姆級(jí)教程

    本文詳細(xì)介紹了在已安裝Python的情況下如何正確安裝和配置Anaconda環(huán)境,包括Python環(huán)境變量的配置、Anaconda的下載安裝以及環(huán)境變量配置,文中通過(guò)代碼就介紹的非常詳細(xì),需要的朋友可以參考下
    2024-11-11
  • 關(guān)于DataFrame數(shù)據(jù)的查詢和編輯

    關(guān)于DataFrame數(shù)據(jù)的查詢和編輯

    在使用pandas處理DataFrame時(shí),可通過(guò)列索引標(biāo)簽獲取列數(shù)據(jù),行數(shù)據(jù)的獲取可以利用行索引或位置切片,如iloc和loc方法,增加數(shù)據(jù)時(shí),可通過(guò)append方法增加行,直接賦值增加列,刪除數(shù)據(jù)則通過(guò)drop方法,通過(guò)設(shè)置axis參數(shù)確定是刪除行還是列
    2024-09-09
  • Tensorflow tf.nn.atrous_conv2d如何實(shí)現(xiàn)空洞卷積的

    Tensorflow tf.nn.atrous_conv2d如何實(shí)現(xiàn)空洞卷積的

    這篇文章主要介紹了Tensorflow tf.nn.atrous_conv2d如何實(shí)現(xiàn)空洞卷積的,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04
  • python中pyplot直方圖的繪制方式

    python中pyplot直方圖的繪制方式

    這篇文章主要介紹了python中pyplot直方圖的繪制方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • Pandas篩選DataFrame含有空值的數(shù)據(jù)行的實(shí)現(xiàn)

    Pandas篩選DataFrame含有空值的數(shù)據(jù)行的實(shí)現(xiàn)

    本文主要介紹了Pandas篩選DataFrame含有空值的數(shù)據(jù)行的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • 如何獲取Python簡(jiǎn)單for循環(huán)索引

    如何獲取Python簡(jiǎn)單for循環(huán)索引

    這篇文章主要介紹了如何獲取Python簡(jiǎn)單for循環(huán)索引,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11

最新評(píng)論

淮滨县| 康平县| 雷山县| 岑巩县| 易门县| 夏津县| 绥棱县| 营山县| 上林县| 东乡| 兴安县| 扎兰屯市| 兰考县| 梓潼县| 黎川县| 陇川县| 鸡东县| 如东县| 广水市| 和平县| 城口县| 江北区| 莎车县| 康定县| 温泉县| 东平县| 穆棱市| 炎陵县| 新乡县| 贵阳市| 东至县| 禹州市| 武安市| 手机| 永城市| 锡林郭勒盟| 康马县| 南康市| 广昌县| 昌图县| 永宁县|