前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Django——信号

Django——信号

作者头像
py3study
发布2020-01-19 17:09:14
6750
发布2020-01-19 17:09:14
举报
文章被收录于专栏:python3python3

django——signal

其实可以理解为django内部的钩子,当某一个事件发生时,其它程序会触发并对其作出相关反应,通过signal回调处理函数(receivers),从而更大程度的解耦我们的项目

  • 导入类库 1 from django.shortcuts import render 2 from django.http import HttpResponse 3 from django.core.signals import request_finished,request_started,got_request_exception 4 from django.dispatch import receiver 5 from django.dispatch.dispatcher import Signal 6 from django.db.models import signals 7 from django.db.models.signals import pre_save,pre_delete 8 from django.db.models.base import Model 9 import django.dispatch 10 from app.models import SomeModel
  • Django内置信号
代码语言:javascript
复制
1 @receiver(request_started)
2 def requeststarted(sender,**kwargs):
3     print(sender,'这是request_started')
4 request_started.connect(requeststarted)#请求完成信号
  • 内置信号触发方式
    • 先定义信号激活时要触发的函数,然后用 信号类型名.connect(函数名),即可达到与第二种装饰器方法相同的效果
    • 一个receiver装饰器,里面第一个参数放信号的类型,第二个参数放附加参数,然后装饰信号激活时要触发的函数 1 @receiver(pre_save) #model保存信号 2 def presave(sender,**kwargs): 3 print(sender,'这是pre_save') 4 5 @receiver(pre_delete) #model删除信号 6 def predelete(sender,**kwargs): 7 print(sender,'这是pre_delete')
  • 自定义信号

没有内置这种信号,用户可自定义,与内置信号使用的第一种方法相同

代码语言:javascript
复制
1 bus_comming = django.dispatch.Signal(providing_args=['plate_numbers'])
2 
3 def callback(sender,**kwargs):
4     print(sender,kwargs,'这是自定义信号')
5 
6 bus_comming.connect(callback)
7 bus_comming.send(sender='lijingbo',plate_numbers=666)
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-03-10 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • django——signal
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档