You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用django-notification发送保留发送者信息的匿名通知?

Django-Notification 匿名通知实现方案

问题说明

我已经实现了特定对象变更时发送通知的功能,代码如下:

notify.send(request.user, #UserA
            recipient=worker.profile.user, #UserB
            target=application, 
            verb="Your object has been changed")

当前通知显示效果为:UserA: Your object Obj has been changed

我的需求是发送匿名通知——不显示发送者UserA的名称,仅展示Your object Obj has been changed,但要在后台保留发送者的相关信息。尝试过两种方法都没成功:

  • 把sender字段设为None,但该字段要求非空;
  • 设置actor字段,通知里还是会显示request.user的名称。

可行解决方案

1. 自定义通知渲染模板

django-notification的通知内容是通过模板渲染生成的,直接修改模板就能隐藏发送者信息:

  • 在项目的templates/notifications目录下创建/覆盖默认模板文件(比如notification.html)
  • 移除模板中渲染发送者(actor)的部分,示例模板片段:
{% if verb %}
<strong>{{ verb }}</strong>
{% if target %}
<em>{{ target }}</em>
{% endif %}
{% endif %}

这样渲染后的通知就不会显示发送者名称,同时数据库里依然保留发送者的原始信息。

2. 用匿名用户实例作为发送者,额外存储真实发送者信息

创建一个未保存到数据库的匿名用户实例作为sender传入,同时把真实发送者的ID存入extra_data字段:

from django.contrib.auth.models import AnonymousUser

# 创建匿名用户实例
anonymous_sender = AnonymousUser()
# 把真实发送者ID存入额外数据字段
notify.send(anonymous_sender,
            recipient=worker.profile.user,
            target=application,
            verb="Your object has been changed",
            extra_data={"real_sender_id": request.user.id})

这种方式下通知不会显示发送者名称,后续需要追溯时,可通过extra_data里的ID查询到真实发送者。

3. 利用库的匿名配置参数

根据文档提到的字段支持匿名用法,尝试传入anonymous=True参数并将发送者设为None(如果库支持该参数):

notify.send(None,
            recipient=worker.profile.user,
            target=application,
            verb="Your object has been changed",
            anonymous=True,
            extra_data={"real_sender_id": request.user.id})

如果该参数生效,模板会自动跳过发送者的渲染,同时通过extra_data保留真实发送者的信息。

注意事项

  • 自定义模板时,要确保模板路径能被django-notification识别,或者在调用notify.send时通过template参数指定自定义模板;
  • 使用AnonymousUser时,如果遇到属性缺失的错误,可以手动给实例添加必要属性(比如username设为空字符串);
  • 无论用哪种方法,都要通过extra_data妥善存储真实发送者信息,方便后续业务追溯。

内容的提问来源于stack exchange,提问作者skypidoge

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 09:55:04