Django:信号到底有什么用?

oro*_*aki 8 django aop django-signals

我很难理解信号如何进入我的应用程序(以及它们如何工作期).以下是我认为适用的三个方面(根据我目前的知识):

  1. 将XML发送到远程服务器以进行报告(在事务完成后).
  2. 重新调整图像大小并在用户上传后将缩略图上传到S3.
  3. 用户从其帐户中删除图像对象后,从S3中删除旧图像.

我是完全偏离基地(我觉得我可能会).我收到信号和多线程混淆了吗?如果是这样,他们在应用程序中进行比较吗?它们只是用于解耦吗?另外,确保你提前实例化它们并且不使用本地函数(因为它们会收集垃圾)是什么?有人可以详细说明吗?我是否应该将它们全部放入请求中间件中以便我不必担心?

And*_*lio 16

Django Signals是一种A响应事件执行操作的方法E.

在虚幻的世界中,您可以通过修改事件E发生的代码并附加代码来执行操作来避免使用信号A.

问题是,这样做会破坏可维护性,可读性和许多其他软件工程形容词:)

信号允许您独立地从事件E发生的位置或方式做同样的事情,因此以巧妙的方式这样做,允许可维护性,可读性等...

是的,我认为说信号对于启用解耦是有用的,这是真的.

(你也提到了多线程.如果你这样做,因为你认为信号是好的,因为它们是同时执行的,所以很快......嗯......我不知道它们是否同时被执行但无论如何我真的不认为这是django信号有用的重点)

利用信号的好方法的一个例子是,当你想在django中向用户存储其他信息时,你必须使用Userprofiles.在这种情况下,文档本身告诉您,为了响应任何新用户的创建而注册信号可能是方便的,只是为了向新创建的用户添加空用户配置文件.

  • Django信号肯定是同步发送的. (7认同)

Bri*_*eal 5

这是一个可能有帮助的示例。

假设您需要在保存模型实例时执行某些操作。但是,此操作与模型或模型实例本身没有直接关系。因此,将操作代码放入模型的 save() 方法中没有什么意义。这会导致不必要的代码耦合和混乱。相反,您可以在应用程序中的其他位置(甚至在另一个应用程序中)创建更有意义的信号处理程序。