消息通知
时间:2019-09-03
本文章向大家介绍消息通知,主要包括消息通知使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
未读消息列表页开发
models.py
@python_2_unicode_compatible class NotificationQuerySet(models.query.QuerySet): def unread(self): return self.filter(unread=True).select_related('actor', 'recipient') def read(self): return self.filter(unread=False).select_related('actor', 'recipient') def mark_all_as_read(self, recipient=None): """标为已读,可以传入接收者参数""" qs = self.unread() if recipient: qs = qs.filter(recipient=recipient) return qs.update(unread=False) def mark_all_as_unread(self, recipient=None): """标为未读,可以传入接收者参数""" qs = self.read() if recipient: qs = qs.filter(recipient=recipient) return qs.update(unread=True) def get_most_recent(self, recipient=None): """获取最近5条未读通知""" qs = self.unread()[:5] if recipient: qs = qs.filter(recipient=recipient)[:5] return qs def serialize_latest_notifications(self, recipient=None): """序列化最近5条未读通知,可以传入接收者参数""" qs = self.get_most_recent(recipient) notification_dic = serializers.serialize('json', qs) return notification_dic @python_2_unicode_compatible class Notification(models.Model): """参考:https://github.com/django-notifications/django-notifications""" NOTIFICATION_TYPE = ( ('L', '赞了'), # like ('C', '评论了'), # comment ('F', '收藏了'), # favor ('A', '回答了'), # answer ('W', '接受了回答'), # accept ('R', '回复了'), # reply ('I', '登录'), # logged in ('O', '退出'), # logged out ) uuid_id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) slug = models.SlugField(max_length=80, null=True, blank=True, verbose_name='(URL)别名') actor = models.ForeignKey(settings.AUTH_USER_MODEL, related_name="notify_actor", on_delete=models.CASCADE, verbose_name="触发者") verb = models.CharField(max_length=1, choices=NOTIFICATION_TYPE, verbose_name="通知类别") recipient = models.ForeignKey(settings.AUTH_USER_MODEL, null=True, blank=False, related_name="notifications", on_delete=models.CASCADE, verbose_name='接收者') created_at = models.DateTimeField(db_index=True, auto_now_add=True, verbose_name='创建时间') updated_at = models.DateTimeField(auto_now=True, verbose_name='更新时间') content_type = models.ForeignKey(ContentType, related_name='notify_action_object', null=True, blank=True, on_delete=models.CASCADE) object_id = models.CharField(max_length=255, null=True, blank=True) #可以是news对象 也可以是artice对象 action_object = GenericForeignKey() unread = models.BooleanField(default=True, verbose_name='未读') objects = NotificationQuerySet.as_manager() class Meta: verbose_name = "通知" verbose_name_plural = verbose_name ordering = ("-created_at",) def __str__(self): if self.action_object: return f'{self.actor} {self.get_verb_display()} {self.action_object}' return f'{self.actor} {self.get_verb_display()}'
点击标记全部为已读
点击标记单个为已读
通知指定用户
文章动态发表
补充重新加载的功能
原文地址:https://www.cnblogs.com/xzqpy/p/11456273.html
- RadRails1.0降临——增加Profiler、CallGraph Analyzer和Rails Shell等新特性
- Rails存储库从SVN转向Git
- 报告称10后已变成出境游“老司机”屌丝80后:我还没出过国
- 担心人工智能取代你的工作?听听微软科学家怎么说!
- Radiant: 基于Ruby on Rails的内容管理系统
- “大数据”如何追回1.3亿元税款?
- Enterprise Library深入解析与灵活应用(5):创建一个简易版的批处理执行器,认识Enterprise Library典型的配置方式和对象创建方式
- BTC.com时讯-IBM等老牌大企业因区块链技术获得新活力
- Kit 3D 更新
- Enterprise Library深入解析与灵活应用(5):创建一个简易版的批处理执行器,认识Enterprise Library典型的配置方式和对象创建方式
- 晚上好啊!这是今天人工智能精选要闻
- 构建Flex应用的10大误区
- Flex的起步推动新语言学习
- 简单科普云计算相关内容
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- android基于SwipeRefreshLayout实现类QQ的侧滑删除
- PopupWindow自定义位置显示的实现代码
- Bootstrap 下拉菜单.dropdown的具体使用方法
- Android访问assets本地json文件的方法
- Android延时操作的三种方法
- 5步教你快速写一个android Router路由框架
- Android 中使用RecyclerView实现底部翻页
- Android中Glide库的使用小技巧总结
- Android Studio手动配置Gradle的方法
- Android仿微信@好友功能 输入@跳转、删除整块
- Android开发实现广告无限循环功能示例
- Android仿微信底部菜单栏效果
- MySQL 案例:Update 死锁详解
- Android 线程之自定义带消息循环Looper的实例
- 详解Androidstudio3.0 关于Gradle报错的问题(小结)