django - 创建django信号以更新用户详细信息

标签 django

我正在django项目中工作,我想在该项目中实现一个信号,在更改某些用户地址时应调用该信号。我已经看到了内置信号,但是在我的情况下它们似乎不起作用,因为如果我使用save也将在其他保存事件中调用,尽管我能够创建自定义信号,但我找不到,我该怎么称呼它?

请提出建议。

提前致谢。

最佳答案

首先定义一个自定义信号。这里的自定义信号是django.dispatch.Signal的子类。该代码可以存在于app/signals.py中。

from django.dispatch import Signal
user_address_changed = Signal(providing_args=["user"])

接下来,请确保在更改用户地址时发送此信号。根据您定义UserAddress的方式,可以在不同的地方完成此操作。我们假设存在一个 View ,该 View 可让用户更新其Address模型。该代码大概在app/views.py中。
from app import signals

def update_address(request, *args, **kwargs):
    # all the changes go well.
    signals.user_address_changed.send(sender=None, user=request.user)
    # Render to template etc.

现在,您需要为此信号设置一个接收器。
from app.signals import user_address_changed

def handle_user_address_change(sender, **kwargs):
    """Trap the signal and do whatever is needed"""
    user = kwargs['user']
    # Write to log, update db, send mail etc.

user_address_changed.connect(handle_user_address_change)

更新

(在阅读注释之后; OP解释说没有单独的 View 更新地址)。在这种情况下,您可以尝试覆盖User.save()发出此信号。我说“尝试”是因为我不知道您使用的是自己的User类还是auth.User

关于django - 创建django信号以更新用户详细信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3520968/

相关文章:

Django 和 Celery - 更改后将代码重新加载到 Celery 中

python - 无法访问模板中的foreignKey

ajax - 如何将失败响应从 django 发送到 ajax

python - 第一次如何自动初始化django对象?

Django Comments : Want to remove user URL, 不展开模型。如何?

python - 工厂男孩 django 工厂中的 FACTORY_FOR 在哪里?

python - 如何验证 django rest 框架上的唯一约束?

python - 改进 django Rest 框架中的分页和序列化时间

django - 使用 REST 框架查询 URL 中的参数

python - Django 1.1 到 Django 1.3