Django中的信号是啥

  介绍

本篇文章给大家分享的是有关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中的信号是啥,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注行业资讯频道。

Django中的信号是啥