介绍
本篇文章给大家分享的是有关Django中的信号是啥,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。
Django提供一个“信号分发器”,允许解耦的应用在框架的其它地方发生操作时会被通知到。也就是说在特定事件发生时,可以发送一个信号去通知注册了这个信号的一个或者多个回调,在回调里进行逻辑处理。
Django内置了一些信号,比如:
django.db.models.signals.pre_save 在某个模型保存之前调用 django.db.models.signals.post_save 在某个模型保存之后调用 django.db.models.signals.pre_delete 在某个模型删除之前调用 django.db.models.signals.post_delete 在某个模型删除之后调用 django.core.signals.request_started 在建立Http请求时发送 django.core.signals.request_finished 在关闭Http请求时发送
我们要做的,就是注册一个接收函数。例如,如果要在每次请求完成之后,打印一行字。
可以使用回调的方式注册:
#,接收器 def my_callback(发送者,* * kwargs): 打印才能(“Request 完成!“) ,, #,连接 得到django.core.signalsimport request_finished ,, request_finished.connect (my_callback)
也可以使用装饰器的方式注册、下面这段代码和上面完全是等价的。
得到django.core.signalsimport request_finished 得到django.dispatchimport 接收机 ,, @receiver (request_finished) def my_callback(发送者,* * kwargs): 打印才能(“Request 完成!“)
接收回调函数除了可以使发送者之用外,还可以使用其他一些参数,比如针对pre_save函数:
发送方:发送者(如果是pre_save的话,就是模型类)
实例:实例
原料使用
update_fields
post_save()是一个比较实用函数,可以支持一些联动的更新。而不必让我们每次都写在视图里面。比如:有用户提交了退款申请,我们需要把订单的状态修改成“已退款”的状态,就可以使用信号机制,而不必在每处都修改。
@receiver (post_save,发送方=RefundForm) deforder_state_update(发送方,,,,,,* * kwargs): instance.order.state =,才能退还 instance.order.save才能(),#,这里,秩序是refundform的一个外键
当然,这里可以写的更多更周全,例如退款单取消改回状态等。
观察者是非常实用的一个设计模式,Django也支持用户自定义一些信号。
以上就是Django中的信号是啥,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注行业资讯频道。