当前位置: 首页 > 面试题库 >

当有人发表评论时,如何使用django-notification通知用户

盖斌
2023-03-14
问题内容

我已经在django进行了一段时间的开发,并且已经开发了一个简洁的网站,该网站具有编写博客,发布问题,共享内容等功能。但是,仍然缺少一件事,即为用户创建通知。

我想做的是,只要有人对自己的帖子发表评论,或者有人关注某个特定的帖子并且有最新动态,便会在其个人资料中通知用户,然后将该更新告知用户。我环顾了许多应用程序,但是我对如何做仍然感到困惑。

在使用的情况下,django- notification我似乎有一种印象(可能是错误的),我只能用它来通过电子邮件通知用户,即我无法像在Facebook上一样在用户个人资料中显示这些通知。

首先,我想知道我是否做错了,然后我真的需要一些适当的教程或指导来进行操作。我知道如何注册通知并通过适当的信号发送通知,但是如果可以的话,没有文档说明如何在模板中显示这些通知。

任何指导/教程/入门文档将不胜感激。


问题答案:

是的django-notifications仅用于电子邮件通知。

这是一个信号槽,您可以将其添加到models.py中并根据自己的需要进行调整:

from django.db import models
from django.contrib.sites.models import Site
from django.db.models import signals
from notification import models as notification

def create_notice_types(app, created_models, verbosity, **kwargs):
    notification.create_notice_type("new_comment", "Comment posted", "A comment has been posted")
signals.post_syncdb.connect(create_notice_types, sender=notification)

def new_comment(sender, instance, created, **kwargs):
    # remove this if-block if you want notifications for comment edit too
    if not created:
        return None

    context = {
        'comment': instance,
        'site': Site.objects.get_current(),
    }
    recipients = []

    # add all users who commented the same object to recipients
    for comment in instance.__class__.objects.for_model(instance.content_object):
        if comment.user not in recipients and comment.user != instance.user:
            recipients.append(comment.user)

    # if the commented object is a user then notify him as well
    if isinstance(instance.content_object, models.get_model('auth', 'User')):
        # if he his the one who posts the comment then don't add him to recipients
        if instance.content_object != instance.user and instance.content_object not in recipients:
            recipients.append(instance.content_object)

    notification.send(recipients, 'new_comment', context)

signals.post_save.connect(new_comment, sender=models.get_model('comments', 'Comment'))

现在使用模板,非常简单。

模板/通知/new_comment/short.txt

{{ comment.user }} commented on {{ comment.object }}

模板/通知/new_comment/notice.html

<a href="{{ comment.user.get_absolute_url }}">{{ comment.user }}</a> commented <a href="{{ comment.content_object.get_absolute_url }}">{{ comment.content_object }}</a>

模板/通知/new_comment/full.txt

{{ comment.user }} commented on {{ comment.content_object }}

Comment:
{{ comment.comment }}

Reply on: 
http://{{ site.domain }}{{ comment.content_object.get_absolute_url }}

警告:这是对我们的生产代码的非常简化且未经测试的修改。

注意: Django-1.7已弃用post_syncdb信号

以下是更多信息:

  • 文件资料
  • stringfellow的博客文章


 类似资料:
  • 问题内容: 我正在写一个Dockerfile。有没有办法在此文件中发表评论? Docker是否具有注释选项,该选项占用了其余行而忽略了它? 问题答案: 您可以使用#作为该行的开头来注释该行。 注意: #as 注释只能在行的 开始处 使用。

  • 悬浮出现在页面角落,显示全局的通知提醒消息。 基本用法 适用性广泛的通知栏 Notification 组件提供通知功能,Element Plus 注册了$notify方法,接收一个options字面量参数,在最简单的情况下,你可以设置title字段和message字段,用于设置通知的标题和正文。默认情况下,经过一段时间后 Notification 组件会自动关闭,但是通过设置duration,可以

  • Notification 通知 悬浮出现在页面右上角,显示全局的通知提醒消息。 基本用法 适用性广泛的通知栏 ::: demo Notification 组件提供通知功能,Element 注册了Notification方法,接收一个options字面量参数,在最简单的情况下,你可以设置title字段和message字段,用于设置通知的标题和正文。默认情况下,经过一段时间后 Notification

  • 悬浮出现在页面右上角,显示全局的通知提醒消息。 基础用法 适用性广泛的通知栏 所有的通知会在 3000ms 后自动消失, 当然你参考下文的参数来更改具体时间。但我们并没有设置永远不会消失或无法关闭的通知! <el-button [plain]="true" (click)="handle()"> 尝试 </el-button> <!--组件中使用: --> <script type="text

  • Notification 通知 悬浮出现在页面角落,显示全局的通知提醒消息。 基本用法 适用性广泛的通知栏 Notification 组件提供通知功能,Element 注册了$notify方法,接收一个options字面量参数,在最简单的情况下,你可以设置title字段和message字段,用于设置通知的标题和正文。默认情况下,经过一段时间后 Notification 组件会自动关闭,但是通过设置

  • 本文向大家介绍Android开发之Notification通知用法详解,包括了Android开发之Notification通知用法详解的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Android开发之Notification通知用法。分享给大家供大家参考,具体如下: 根据activity的生命周期,在activity不显示时,会执行onStop函数(比如按下home键),所以你在onSt