6. Django在对象创建和更新时,会引发哪些信号?

Django 提供了用于模型对象创建和删除周期的信号钩子。这些Django提供的信号是:

  • pre_init
  • post_init
  • pre_save
  • post_save
  • pre_delete
  • post_delete

在这其中最常用的信号是 pre_savepost_save 。我们来仔细看看他们。

6.1. 信号 vs 重写.save()

既然信号和重写 .save 有类似的作用,用哪一个是一个时常困惑的问题。这里给出了何时需要用哪一个。

  • 如果你想其他人,如第三方应用,重写或定制对象的 save 行为,你应该抛出你自己singnals。
  • 如果你想要介入一个你无权控制更改的应用中的 save 行为,你应该使用 post_savepre_save 钩子信号。

如果你想定制化你自己的应用的 save 行为,你可以重写 save 方法。

让我们看一个 UserToken 模型的例子。这是一个用于提供身份验证的类,并且应该随 User 的创建而创建。

class UserToken(models.Model):
    token = models.CharField(max_length=64)

    # ...