欢迎访问 生活随笔!

生活随笔

当前位置: 首页 >

Django信号

发布时间:2024/1/17 33 豆豆
生活随笔 收集整理的这篇文章主要介绍了 Django信号 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

1,django内置信号

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 # 创建数据库连接时,自动触发

调用内置信号的俩种形式

2,django自定义信号

1 )、定义信号

所有的信号都是 `django.dispatch.Signal` 的实例、那么在项目某个app下创建 名为 `custom_signals.py` 的文件,如下这么写

# filename: custom_singals.pyimport django.dispatch# 声明了一个 `pizza_done` 信号,它将为接收者提供 `toppings`, `size` 参数 # 可以在任何时候更改这个参数列表 pizza_done = django.dispatch.Signal(providing_args=["toppings", "size"])

并配置信号回调函数

在项目某个app下创建 名为 `register.py` 的文件,如下这么写

# filename: register.py # 注册信号使用from app01.custom_singals import pizza_donedef pizza_done_func(sender, **kwargs):print("msg:", sender, kwargs)pizza_done.connect(pizza_done_func)

2 )、注册信号

项目启动的时候要将这些信号注册,那么在对应 `app` 的 `apps.py` 文件中如下

# filename: app_name/apps.pyfrom django.apps import AppConfig# `django` 工具包中封装好的动态导入模块的方法 from django.utils.module_loading import import_module class App01Config(AppConfig):name = 'app01'def ready(self):# 项目启动所有 `app` 的 `ready` 方法下的代码均会执行import_module("app01.register") # 注册信号

3 )、发送信号

事先定义 一组 `url` 映射关系,在视图业务操作中发送我们的信号( 有俩种发送信号的方法 )

from django.shortcuts import HttpResponsefrom app01.custom_singals import pizza_done# Create your views here.class PizzaStore:def send_pizza(self, toppings, size):# 发送信号pizza_done.send(sender=self.__class__, toppings=toppings, size=size)# "OR" 上下俩个方法是等价的, 区别 ~ ~pizza_done.send_robust(sender=self.__class__, toppings=toppings, size=size)def index(request, ):# 业务操作, 执行信号发送操作PizzaStore().send_pizza("chicken", "40")return HttpResponse("ok")

 

转载于:https://www.cnblogs.com/129TL/p/10156212.html

总结

以上是生活随笔为你收集整理的Django信号的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。