Django:信号到底有什么用?

标签 django django-signals aop

我很难理解信号如何在我的应用程序中工作(以及它们如何工作)。我认为(适用于我目前的知识)这三个方面将适用:

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

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

    最佳答案

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

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

    问题在于这样做会使您失去可维护性,可读性和许多其他软件工程形容词:)

    信号使您可以从E事件发生的地点或方式进行相同的操作,从而以一种可维护性,可读性等巧妙的方式进行……

    是的,我认为说信号对启用的解耦非常有用。

    (您还提到了多线程。如果这样做是因为您认为信号是好的,因为它们可以并发且如此迅速地执行...嗯...我不知道它们是否可以并发执行,但无论如何我真的不认为这就是Django信号有用的地方)

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

    关于Django:信号到底有什么用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2097213/

    相关文章:

    Django 多个数据库 - 一个并不总是可用

    django - Nginx 在子目录中为 Django 提供服务 - 管理员登录正在重定向

    ajax - Django - POST 请求后渲染

    Django 信号 : How to signal for first entry in table

    java - 方面和方法之间有什么区别? [AOP]

    python - 什么是低内存使用的良好数据库?

    python - Django + DjangoCMS 信号处理程序未被调用

    django - 响应 Django 中的模型更改?

    java - Spring AOP,切入点根据路径变量名触发

    java - 如何将注释值发送到 @Before 方法中?