凭借你勤奋的写作,拜读你文章的用户越来越多,他们的评论也分散在众多的文章之中。作为博主,读者的留言肯定是要都看的;而读者给你留言,自然也希望得到回复。
怎么将未读的留言呈现给正确的用户呢?总不能用户自己去茫茫文章中寻找吧,那也太蠢了。给评论增加通知功能就是很流行的解决方案:比如微信朋友圈留言的通知、新浪微博留言的通知、以及各种社交平台的“小红点”。
本篇将以django-notifications
为基础,非常高效的搭建一个简易的通知系统。
发送通知
前面的步骤我们已经很熟悉了。
首先安装django-notifications
:
(env) > pip install django-notifications-hq
注册app:
my_blog/settings.py
...
INSTALLED_APPS = [
...
'notifications',
...
]
...
在根路由中安装路径:
my_blog/urls.py
...
import notifications.urls
urlpatterns = [
...
path('inbox/notifications/', include(notifications.urls, namespace='notifications')),
...
]
...
注意这里的notifications.urls
没有像之前一样用字符串,是为了确保模块安装到正确的命名空间中。
数据迁移:
(env) > python manage.py migrate
app就安装好了。
接下来你就可以在项目的任何地方发送通知了!像这样:
from notifications.signals import notify
notify.send(actor, recipient, verb, target, action_object)
其中的参数释义:
actor
:发送通知的对象recipient
:接收通知的对象verb
:动词短语target
:链接到动作的对象*(可选)*action_object
:执行通知的对象(可选)
有点绕,举个栗子:杜赛 (actor)
在 Django搭建个人博客 (target)
中对 你 (recipient)
发表了 (verb)
评论 (action_object)
。
因为我们想要在用户发表评论的时候发送通知,因此修改一下发表评论的视图:
comments/views.py
...
from notifications.signals import notify
from django.contrib.auth.models import User
...
def post_comment(...):
...
# 已有代码,创建新回复
if comment_form.is_valid():
...
# 已有代码,二级回复
if parent_comment_id:
...
# 新增代码,给其他用户发送通知
if not parent_comment.user.is_superuser:
notify.send(
request.user,
recipient=parent_comment.user,
verb=&