django-notifications:NOTIFICATIONS_SOFT_DELETE = True如何工作?

时间:2015-04-25 05:40:53

标签: django python-2.7 notifications django-notification

我想要一个我的应用程序的通知系统,所以我正在研究一个名为django-notifications的django包。我理解了所有这些,但NOTIFICATION_SOFT_DELETE =真实设置。

我的意思是当我执行以下操作时:

from notifications import notify
notify.send(user, recipient=user, verb='you reached level 10')

如果我没有错,这将使用deleted=False进入数据库。我的settings.py

中有以下内容
NOTIFICATIONS_SOFT_DELETE=True

更新为deleted=Falsedeleted=True。但我不知道这种变化何时发生。文档中有一个API将所有通知标记为deleted=True

  

qs.mark_all_as_deleted()| qs.mark_all_as_deleted(受体)

     

标记查询集中的所有通知(也可以选择过滤   收件人)as deleted = True。必须使用   NOTIFICATIONS_SOFT_DELETE =真。

但如何将某些通知标记为deleted ??

2 个答案:

答案 0 :(得分:0)

这是官方文件:

  

软删除

     

默认情况下,delete/(?P<slug>\d+)/会从DB中删除指定的通知记录。您可以将此行为更改为&#34;将Notification.deleted字段标记为True&#34;由:

     

添加到您的settings.py: NOTIFICATIONS_SOFT_DELETE=True   使用此选项,QuerySet方法未读和读取包含一个过滤器:deleted = False。同时,QuerySet方法已删除,active,mark_all_as_deleted,mark_all_as_active已打开。请参阅QuerySet方法部分中的更多详细信息。

     

<强> qs.mark_all_as_deleted() | qs.mark_all_as_deleted(recipient)

     

将查询集中的所有通知(可选择也按收件人筛选)标记为deleted=True。必须与NOTIFICATIONS_SOFT_DELETE=True一起使用。

所以,如果你想标记一些要删除的通知,你可以做其中任何一个

  1. 在前端只需调用delete/(?P<slug>\d+)/
  2. 的API
  3. 在后端查询通知并致电mark_all_as_deleted()mark_all_as_deleted(recipient)

答案 1 :(得分:0)

这就是您所需要的。

安装 django-notifications-hq 并将“通知”作为应用添加到 settings.py 中已安装的应用程序后,并添加 url('^inbox/notifications/', include(notifications.urls, namespace='通知'))到您的网址格式。

确保然后安装 django-notifications-rest,然后将“notifications_rest”安装为您在上面添加的应用程序旁边的应用程序。然后还添加 url('^notifications/', include('notifications_rest.urls')) 如果您使用的是 django v3.0 及以下版本,或者如果您使用的是 v3.1 及以上版本,请添加 >path('^notifications/', include('notifications_rest.urls')) 在 url 文件中的 urlpatterns 下。

然后python manage.py makemigrations。这将创建一个 rest 端点,您可以在 http://localhost:8000/notifications 上访问它。从这个端点到你的前端,比如 react,你可以发送一个 api 请求来获取所有未读的请求,然后在 onclick 事件之后通过 api 发送另一个请求将所有请求标记为已读。

http://localhost:8000/notifications/all/ 将返回所有请求 http://localhost:8000/notifications/unread/ http://localhost:8000/notifications/delete/22 将删除 id 为 22 的请求 http://localhost:8000/notifications/mark-all-as-read/ 会将所有请求标记为已读,以及您可以访问的所有其他端点。

但我相信在这种情况下,使用 http://localhost:8000/notifications/unread/ 在页面加载时获取所有未读请求,然后单击,使用 http:// localhost:8000/notifications/mark-all-as-read/http://localhost:8000/notifications/delete/22 分别删除或减少通知。