亚洲综合原千岁中文字幕_国产精品99久久久久久久vr_无码人妻aⅴ一区二区三区浪潮_成人h动漫精品一区二区三

主頁(yè) > 知識(shí)庫(kù) > 正確的理解和使用Django信號(hào)(Signals)

正確的理解和使用Django信號(hào)(Signals)

熱門標(biāo)簽:看懂地圖標(biāo)注方法 佛山通用400電話申請(qǐng) 京華圖書館地圖標(biāo)注 蘇州人工外呼系統(tǒng)軟件 電話機(jī)器人貸款詐騙 淮安呼叫中心外呼系統(tǒng)如何 打印谷歌地圖標(biāo)注 廣東旅游地圖標(biāo)注 電話外呼系統(tǒng)招商代理

Django 提供一個(gè)了“信號(hào)分發(fā)器”機(jī)制,允許解耦的應(yīng)用在框架的其它地方發(fā)生操作時(shí)會(huì)被通知到。 通俗而講Django信號(hào)的工作原理就是當(dāng)某個(gè)事件發(fā)生的時(shí)候會(huì)發(fā)出一個(gè)信號(hào)(signals), 而監(jiān)聽(tīng)這個(gè)信號(hào)的函數(shù)(receivers)就會(huì)立即執(zhí)行。Django信號(hào)的應(yīng)用場(chǎng)景很多,尤其是用于不同模型或程序間的聯(lián)動(dòng)。常見(jiàn)例子包括創(chuàng)建User對(duì)象實(shí)例時(shí)創(chuàng)建一對(duì)一關(guān)系的UserProfile對(duì)象實(shí)例,或者每當(dāng)用戶下訂單時(shí)觸發(fā)給管理員發(fā)郵件的動(dòng)作。今天小編我就分享下如何正確使用Django的信號(hào)(signals)。

Django信號(hào)的一個(gè)簡(jiǎn)單例子

假設(shè)我們有一個(gè)如下User模型,我們希望每次有User對(duì)象新創(chuàng)建時(shí)都打印出有新用戶注冊(cè)的提示信息,我們可以使用Django信號(hào)(signals)輕松實(shí)現(xiàn)。我們的信號(hào)發(fā)送者sender是User模型,每當(dāng)User模型執(zhí)行post_save動(dòng)作時(shí)就會(huì)發(fā)出信號(hào)。此時(shí)我們自定義的create_user函數(shù)一旦監(jiān)聽(tīng)到User發(fā)出的post_save信號(hào)就會(huì)執(zhí)行,先通過(guò)if created判斷對(duì)象是新創(chuàng)建的還是被更新的;如果對(duì)象是新創(chuàng)建的,就會(huì)打印出提示信息。

# models.py

from django.db import models

from django.db.models import signals
from django.dispatch import receiver

class User(models.Model):
    name = models.CharField(max_length=16)
    gender = models.CharField(max_length=32, blank=True)

def create_user(sender, instance, created, **kwargs):

    if created:

        print("New user created!")

post_save.connect(create_user, sender=User)

在上例中我們使用了信號(hào)(post_save)自帶的connect的方法將自定義的函數(shù)與信號(hào)發(fā)出者(sender)User模型進(jìn)行了連接。在實(shí)際應(yīng)用中一個(gè)更常用的方式是使用@receiver裝飾器實(shí)現(xiàn)發(fā)送者與監(jiān)聽(tīng)函數(shù)的連接,如下所示。@receiver(post_save, sender=User)讀起來(lái)的意思就是監(jiān)聽(tīng)User模型發(fā)出的post_save信號(hào)。

from django.db import models

from django.db.models.signals import post_save
from django.dispatch import receiver

class User(models.Model):
    name = models.CharField(max_length=16)
    gender = models.CharField(max_length=32, blank=True)

@receiver(post_save, sender=User)
def create_user(sender, instance, created, **kwargs):

    if created:

        print("New user created!")

利用Django信號(hào)實(shí)現(xiàn)不同模型的聯(lián)動(dòng)更新

我們?cè)賮?lái)看一個(gè)復(fù)雜一點(diǎn)的例子。我們有一個(gè)Profile模型,與User模型是一對(duì)一的關(guān)系。我們希望創(chuàng)建User對(duì)象實(shí)例時(shí)也創(chuàng)建Profile對(duì)象實(shí)例,而使用post_save更新User對(duì)象時(shí)不創(chuàng)建新的Profile對(duì)象。這時(shí)我們就可以自定義create_user_profile和save_user_profile兩個(gè)監(jiān)聽(tīng)函數(shù),同時(shí)監(jiān)聽(tīng)sender(User模型)發(fā)出的post_save信號(hào)。由于post_save可同時(shí)用于模型的創(chuàng)建和更新,我們用if created這個(gè)判斷來(lái)加以區(qū)別。

from django.db import models
from django.db.models.signals import post_save
from django.dispatch import receiver

class Profile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    birth_date = models.DateField(null=True, blank=True)

@receiver(post_save, sender=User)
def create_user_profile(sender, instance, created, **kwargs):
   if created:
       Profile.objects.create(user=instance)

@receiver(post_save, sender=User)
def save_user_profile(sender, instance, **kwargs):
    instance.profile.save()

Django常用內(nèi)置信號(hào)

之前的例子中我們使用的都是post_save信號(hào),即在模型調(diào)用save()方法后才發(fā)送信號(hào)。Django其它常用內(nèi)置信號(hào)還包括:

  • django.db.models.signals.pre_save post_save在模型調(diào)用 save()方法之前或之后發(fā)送。
  • django.db.models.signals.pre_init post_init在模型調(diào)用_init_方法之前或之后發(fā)送。
  • django.db.models.signals.pre_delete post_delete在模型調(diào)用delete()方法或查詢集調(diào)用delete() 方法之前或之后發(fā)送。
  • django.db.models.signals.m2m_changed在模型多對(duì)多關(guān)系改變后發(fā)送。
  • django.core.signals.request_started request_finished Django建立或關(guān)閉HTTP 請(qǐng)求時(shí)發(fā)送。

如何正確放置Django信號(hào)的監(jiān)聽(tīng)函數(shù)代碼

在之前案例中,我們將Django信號(hào)的監(jiān)聽(tīng)函數(shù)寫在了models.py文件里。當(dāng)一個(gè)app的與信號(hào)相關(guān)的自定義監(jiān)聽(tīng)函數(shù)很多時(shí),此時(shí)models.py代碼將變得非常臃腫。一個(gè)更好的方式把所以自定義的信號(hào)監(jiān)聽(tīng)函數(shù)集中放在app對(duì)應(yīng)文件夾下的signals.py文件里,便于后期集中維護(hù)。

假如我們有個(gè)account的app,包含了User和Pofile模型,我們不僅需要在account文件夾下新建signals.py,還需要修改account文件下apps.py和__init__.py,以導(dǎo)入創(chuàng)建的信號(hào)監(jiān)聽(tīng)函數(shù)。

# account/signals.py

from django.db.models.signals import post_save
from django.dispatch import receiver
from .models import User, Profile



@receiver(post_save, sender=User)

def create_user_profile(sender, instance, created, **kwargs):

  if created:

      Profile.objects.create(user=instance)



@receiver(post_save, sender=User)

def save_user_profile(sender, instance, **kwargs):

    instance.profile.save()

# account/apps.py

from django.apps import AppConfig

class AccountConfig(AppConfig):
    name = 'account'

    def ready(self):
        import account.signals

# account/__init__.py

default_app_config = 'account.apps.AccountConfig'

小結(jié)

在本文里我們總結(jié)了Django信號(hào)(signals)的工作原理,介紹了如何使用Django信號(hào)實(shí)現(xiàn)模型或程序的聯(lián)動(dòng)。最后我們還總結(jié)了Django常用內(nèi)置信號(hào)以及如何正確放置自定義的信號(hào)監(jiān)聽(tīng)函數(shù)。歡迎關(guān)注我們更多Python Web開(kāi)發(fā)和Django原創(chuàng)文章。

以上就是正確的理解和使用Django信號(hào)(Signals)的詳細(xì)內(nèi)容,更多關(guān)于Django信號(hào)(Signals)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

您可能感興趣的文章:
  • 3分鐘看懂Python后端必須知道的Django的信號(hào)機(jī)制
  • 基于Django signals 信號(hào)作用及用法詳解
  • Django框架 信號(hào)調(diào)度原理解析
  • django 信號(hào)調(diào)度機(jī)制詳解
  • Django中信號(hào)signals的簡(jiǎn)單使用方法
  • 深入理解Django-Signals信號(hào)量
  • 深入理解Django自定義信號(hào)(signals)
  • 利用信號(hào)如何監(jiān)控Django模型對(duì)象字段值的變化詳解
  • Django的信號(hào)機(jī)制詳解

標(biāo)簽:股票 呼和浩特 衡水 江蘇 湖州 駐馬店 畢節(jié) 中山

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《正確的理解和使用Django信號(hào)(Signals)》,本文關(guān)鍵詞  正確,的,理解,和,使用,Django,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《正確的理解和使用Django信號(hào)(Signals)》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于正確的理解和使用Django信號(hào)(Signals)的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    四虎影视库| 九九九在线视频| 四虎影视库国产精品一区| 日本特黄特黄aaaaa大片| 国产精品12| 久久国产精品只做精品| 午夜欧美成人香蕉剧场| 亚洲女人国产香蕉久久精品| 国产成a人片在线观看视频| 免费一级片在线| 97视频免费在线观看| 青青久久精品国产免费看| 九九免费高清在线观看视频| 成人免费网站久久久| 国产一区二区精品| 天天色色网| 久久精品成人一区二区三区| 美女免费毛片| 韩国三级视频在线观看| 999久久狠狠免费精品| 亚洲www美色| 日韩免费在线| 国产一区二区精品| 午夜激情视频在线观看| 国产高清视频免费观看| 国产91素人搭讪系列天堂| 国产91丝袜高跟系列| 欧美爱爱动态| 国产91精品一区| 欧美1区| 国产成人精品影视| 97视频免费在线| 在线观看导航| 四虎影视久久久免费| 久久99中文字幕| 欧美夜夜骑 青草视频在线观看完整版 久久精品99无色码中文字幕 欧美日韩一区二区在线观看视频 欧美中文字幕在线视频 www.99精品 香蕉视频久久 | 色综合久久天天综合| 九九精品久久久久久久久| 欧美国产日韩在线| 国产视频一区二区在线观看| 香蕉视频久久| 成人影视在线播放| 国产精品自拍亚洲| 欧美夜夜骑 青草视频在线观看完整版 久久精品99无色码中文字幕 欧美日韩一区二区在线观看视频 欧美中文字幕在线视频 www.99精品 香蕉视频久久 | 欧美激情影院| 国产高清在线精品一区a| 精品视频在线看| 国产a免费观看| 亚洲第一色在线| 99色视频在线| 国产a网| 一级毛片视频免费| 精品国产一区二区三区久久久狼 | 黄视频网站免费看| 91麻豆国产福利精品| 久久精品店| 亚欧视频在线| 青青久久精品国产免费看| 午夜欧美福利| 亚洲精品永久一区| 一级毛片视频免费| 亚欧成人毛片一区二区三区四区| 日韩一级黄色大片| 99久久精品国产免费| 黄视频网站在线观看| 欧美日本免费| 亚欧视频在线| 欧美日本免费| 精品国产一区二区三区免费| 国产网站免费在线观看| 九九精品影院| 精品视频免费看| 国产一区免费在线观看| 精品国产亚一区二区三区| 国产高清在线精品一区二区| 国产高清在线精品一区二区| 四虎影视库国产精品一区| 91麻豆精品国产自产在线 | 久久久久久久男人的天堂| 久久99爰这里有精品国产| 欧美激情伊人| 亚欧成人乱码一区二区| 午夜激情视频在线播放| 日韩一级黄色大片| 99久久精品国产麻豆| 国产高清在线精品一区a| 久久国产精品只做精品| 欧美日本免费| 可以在线看黄的网站| 免费一级生活片| 韩国毛片免费| 午夜家庭影院| 国产精品自拍一区| 国产成a人片在线观看视频| 午夜家庭影院| 九九九网站| 成人免费网站久久久| 二级片在线观看| 国产不卡在线观看视频| 国产精品12| 亚洲精品影院| 黄视频网站免费| 日韩女人做爰大片| 色综合久久天天综合| 亚洲精品影院| 日韩在线观看免费| 久久成人性色生活片| 黄视频网站免费看| 四虎影视久久久免费| 天天做人人爱夜夜爽2020| 天天色成人网| 国产网站免费在线观看| 色综合久久天天综合| 韩国三级视频在线观看| 欧美一级视频免费观看| 国产成人啪精品视频免费软件| 国产麻豆精品高清在线播放| 国产亚洲免费观看| 日韩中文字幕一区| 午夜家庭影院| 四虎影视精品永久免费网站| 韩国毛片免费大片| 人人干人人草| 日本特黄特色aaa大片免费| 欧美一区二区三区在线观看| 久久精品店| 二级片在线观看| 毛片高清| 日韩在线观看视频黄| 日本在线www| 毛片的网站| 亚洲www美色| 青青青草影院 | 午夜在线影院| 国产精品1024永久免费视频| 国产精品自拍在线观看| 久久99青青久久99久久| 亚洲第一页乱| 麻豆网站在线看| 深夜做爰性大片中文| 中文字幕一区二区三区精彩视频| 精品国产一级毛片| 亚洲不卡一区二区三区在线| 亚洲www美色| 久草免费在线视频| 国产不卡在线播放| 黄色短视屏| 91麻豆精品国产片在线观看| 91麻豆精品国产自产在线观看一区 | 国产91精品系列在线观看| 日韩在线观看网站| 亚洲 激情| 一a一级片| 欧美夜夜骑 青草视频在线观看完整版 久久精品99无色码中文字幕 欧美日韩一区二区在线观看视频 欧美中文字幕在线视频 www.99精品 香蕉视频久久 | 国产原创中文字幕| 亚洲爆爽| 999久久久免费精品国产牛牛| 日本特黄特色aaa大片免费| 午夜精品国产自在现线拍| 99久久精品国产片| 国产成人啪精品| 天天做人人爱夜夜爽2020| 九九九网站| 国产精品12| 国产成人啪精品| 黄视频网站在线观看| 久久精品成人一区二区三区| 日本久久久久久久 97久久精品一区二区三区 狠狠色噜噜狠狠狠狠97 日日干综合 五月天婷婷在线观看高清 九色福利视频 | 99热热久久| 青青青草视频在线观看| 青草国产在线观看| 色综合久久天天综合绕观看| 麻豆系列 在线视频| 毛片高清| 美女免费精品高清毛片在线视| 精品在线免费播放| 可以在线看黄的网站| 亚洲女初尝黑人巨高清在线观看| 国产一区二区精品久| 欧美激情一区二区三区视频高清| 九九九在线视频| 99热精品在线| 午夜精品国产自在现线拍| 久久国产精品只做精品| 日韩一级黄色| 久草免费资源| 黄色免费三级| 精品视频在线看 | 黄色短视屏| 九九九国产| 九九九网站| 欧美另类videosbestsex| 国产国语对白一级毛片| 青青久久精品国产免费看| 精品视频在线观看一区二区| 国产一区二区福利久久| 欧美激情一区二区三区在线| 999精品影视在线观看| 国产亚洲免费观看| 精品在线观看一区|