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

django 信號調(diào)度機制詳解

 更新時間:2019年07月19日 10:42:26   作者:Crazymagic  
這篇文章主要介紹了django 信號調(diào)度機制詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下

前言

Django中提供了“信號調(diào)度”,用于在框架執(zhí)行操作時解耦。通俗來講,就是一些動作發(fā)生的時候,信號允許特定的發(fā)送者去提醒一些接受者。

1、Django內(nèi)置信號

Model signals
  pre_init          # django的modal執(zhí)行其構(gòu)造方法前,自動觸發(fā)
  post_init          # django的modal執(zhí)行其構(gòu)造方法后,自動觸發(fā)
  pre_save          # django的modal對象保存前,自動觸發(fā)
  post_save          # django的modal對象保存后,自動觸發(fā)
  pre_delete         # django的modal對象刪除前,自動觸發(fā)
  post_delete         # django的modal對象刪除后,自動觸發(fā)
  m2m_changed         # django的modal中使用m2m字段操作第三張表(add,remove,clear)前后,自動觸發(fā)
  class_prepared       # 程序啟動時,檢測已注冊的app中modal類,對于每一個類,自動觸發(fā)
Management signals
  pre_migrate         # 執(zhí)行migrate命令前,自動觸發(fā)
  post_migrate        # 執(zhí)行migrate命令后,自動觸發(fā)
Request/response signals
  request_started       # 請求到來前,自動觸發(fā)
  request_finished      # 請求結(jié)束后,自動觸發(fā)
  got_request_exception    # 請求異常后,自動觸發(fā)
Test signals
  setting_changed       # 使用test測試修改配置文件時,自動觸發(fā)
  template_rendered      # 使用test測試渲染模板時,自動觸發(fā)
Database Wrappers
  connection_created     # 創(chuàng)建數(shù)據(jù)庫連接時,自動觸發(fā)

對于Django內(nèi)置的信號,僅需注冊指定信號,當(dāng)程序執(zhí)行相應(yīng)操作時,自動觸發(fā)注冊函數(shù):

from django.core.signals import request_finished
  from django.core.signals import request_started
  from django.core.signals import got_request_exception

  from django.db.models.signals import class_prepared
  from django.db.models.signals import pre_init, post_init
  from django.db.models.signals import pre_save, post_save
  from django.db.models.signals import pre_delete, post_delete
  from django.db.models.signals import m2m_changed
  from django.db.models.signals import pre_migrate, post_migrate

  from django.test.signals import setting_changed
  from django.test.signals import template_rendered

  from django.db.backends.signals import connection_created


  def callback(sender, **kwargs):
    print("xxoo_callback")
    print(sender,kwargs)

  xxoo.connect(callback)
  # xxoo指上述導(dǎo)入的內(nèi)容
from django.core.signals import request_finished
from django.dispatch import receiver

@receiver(request_finished)
def my_callback(sender, **kwargs):
  print("Request finished!")

2、自定義信號

a. 定義信號

import django.dispatch
pizza_done = django.dispatch.Signal(providing_args=["toppings", "size"])

b. 注冊信號  

def callback(sender, **kwargs):
  print("callback")
  print(sender,kwargs)
 
pizza_done.connect(callback)


c. 觸發(fā)信號

from 路徑 import pizza_done
 
pizza_done.send(sender='seven',toppings=123, size=456)

由于內(nèi)置信號的觸發(fā)者已經(jīng)集成到Django中,所以其會自動調(diào)用,而對于自定義信號則需要開發(fā)者在任意位置觸發(fā)。  

需求:

在表中每增加一條數(shù)據(jù)的時候,記錄一條日志


django_signals/__init__.py

from django.db.models import signals

def before_save1(*args,**kwargs):
  print('有車來了,我要服務(wù)了--》',args,kwargs)

def before_save2(*args,**kwargs):
  print('有車來了,我要服務(wù)了--》',args,kwargs)

def after_save1(*args,**kwargs):
  print('有車來了,完事了--》',args,kwargs)

# 增加之前
signals.pre_save.connect(before_save1)
signals.pre_save.connect(before_save2)
# 增加之后
signals.post_save.connect(after_save1)

django_signals/__init__.py

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • python文件操作整理匯總

    python文件操作整理匯總

    本文主要記錄了個人在項目中遇到的一些Python中對于文件、文件夾的操作需要涉及到的函數(shù)等內(nèi)容,非常的詳盡,有需要的可以參考下
    2014-10-10
  • Python中的OpenCV圖像腐蝕處理和膨脹處理

    Python中的OpenCV圖像腐蝕處理和膨脹處理

    這篇文章主要介紹了Python中的OpenCV圖像腐蝕處理和膨脹處理,OpenCV是一個跨平臺的計算機視覺庫,可用于開發(fā)實時的圖像處理、計算機視覺以及模式識別程序,需要的朋友可以參考下
    2023-08-08
  • python使用PyQt5的簡單方法

    python使用PyQt5的簡單方法

    這篇文章主要介紹了python使用PyQt5的簡單方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-02-02
  • 最新評論

    盐山县| 醴陵市| 灵丘县| 积石山| 武强县| 玉龙| 泰宁县| 广宁县| 新兴县| 石门县| 卫辉市| 西乌| 榆林市| 石门县| 天镇县| 新蔡县| 定结县| 唐河县| 易门县| 海伦市| 高雄县| 瓦房店市| 开封市| 黔东| 乌兰县| 平顺县| 天镇县| 尚义县| 房山区| 祁门县| 内黄县| 德惠市| 阿瓦提县| 贵溪市| 金乡县| 蓝山县| 义马市| 汤原县| 贵定县| 北碚区| 武宣县|