日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

信号 应用场景 内置信号 内置信号操作 自定义信号

發布時間:2023/12/18 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 信号 应用场景 内置信号 内置信号操作 自定义信号 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

信號

在某些操作前后,允許特定操作

應用場景

在數據庫操作前后,添加日志。

內置信號

Model signalspre_init # django的modal執行其構造方法前,自動觸發post_init # django的modal執行其構造方法后,自動觸發pre_save # django的modal對象保存前,自動觸發post_save # django的modal對象保存后,自動觸發pre_delete # django的modal對象刪除前,自動觸發post_delete # django的modal對象刪除后,自動觸發m2m_changed # django的modal中使用m2m字段操作第三張表(add,remove,clear)前后,自動觸發class_prepared # 程序啟動時,檢測已注冊的app中modal類,對于每一個類,自動觸發 Management signalspre_migrate # 執行migrate命令前,自動觸發post_migrate # 執行migrate命令后,自動觸發 Request/response signalsrequest_started # 請求到來前,自動觸發request_finished # 請求結束后,自動觸發got_request_exception # 請求異常后,自動觸發 Test signalssetting_changed # 使用test測試修改配置文件時,自動觸發template_rendered # 使用test測試渲染模板時,自動觸發 Database Wrappersconnection_created # 創建數據庫連接時,自動觸發

對于Django內置的信號,僅需注冊指定信號,當程序執行相應操作時,自動觸發注冊函數

內置信號操作

在工程下寫一個python文件,文件名任意,例如sg.py

sg.pyfrom django.db.models.signals import pre_init, post_initimport inspectdef before_create(sender, **kwargs):print("%s" % inspect.stack()[0][3])# print(sender, kwargs)def after_create(sender, **kwargs):print("%s" % inspect.stack()[0][3])# print(sender, kwargs)pre_init.connect(before_create)post_init.connect(after_create)在工程的__init__.pyimport sg # 工程啟動時,自動加載app的models.pyfrom django.db import modelsclass UserInfo(models.Model):username = models.CharField(max_length=32)urls.pyurl(r'^signal/', views.signal),app的views.py from app01 import modelsdef signal(request):obj = models.UserInfo(username='Emma')print('start')obj.save()models.UserInfo.objects.create(username='Wilson')print('end')return HttpResponse('ok') 執行結果:before_createafter_createstartbefore_createafter_createend[11/Jan/2018 21:00:16] "GET /signal/ HTTP/1.1" 200 2

自定義信號

自定制操作

  • 定義信號

    sg.pyimport django.dispatchpizza_done = django.dispatch.Signal(providing_args=["toppings", "size"])
  • 注冊信號

    sg.pydef callback(sender, **kwargs):print("callback")print(sender, kwargs)pizza_done.connect(callback)
  • 觸發信號

    views.pydef signal(request):from sg import pizza_donepizza_done.send(sender="asdfasdf", toppings=123, size=456) # 參數值任意return HttpResponse('ok')
  • 注:特定條件下,觸發自定義信號,比較有意義。例如,添加發送微信

    轉載于:https://www.cnblogs.com/todayisafineday/p/8783723.html

    總結

    以上是生活随笔為你收集整理的信号 应用场景 内置信号 内置信号操作 自定义信号的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。