def notify_comment(**kwargs): """文章有评论时消息通知作者""" actor = kwargs['request'].user obj = kwargs['comment'].content_object notification_handler(actor, obj.user, 'C', obj)
def test_notification(self): """单个通知""" Notification.objects.mark_all_as_read() obj = News.objects.create(user=self.user, content="内容示例", reply=True) notification_handler(self.other_user, self.user, "C", obj) # other_user评论了user assert Notification.objects.unread().count() == 1
def notify_comment(**kwargs): """文章有评论时候通知作者""" from django_comments.models import Comment actor = kwargs["request"].user obj = kwargs["comment"].content_object # 评论的实体对象(实现由外键关联) notification_handler(actor, obj.user, "C", obj)
def notify_comments(**kwargs): """文章有评论时通知作者""" # 从参数中提取动作执行者,即哪个用户给此文章评论 actor = kwargs["request"].user # from django_comments.models import Comment | Comment模型类 中的通用外键 obj = kwargs["comment"].content_object notification_handler(actor, obj.user, "C", obj)
def switch_like(self, user): """点赞或取消赞""" if user in self.liked.all(): # 如果用户已经赞过,则取消赞 self.liked.remove(user) else: # 如果用户没有赞过,则添加赞 self.liked.add(user) # # 通知楼主 notification_handler(user, self.user, 'L', self, id_value=str(self.uuid_id), key='social_update')
def notify_comment(**kwargs): """文章有评论时通知作者""" # kwargs['request'].user django-comments 传递的参数 actor = kwargs['request'].user # kwargs['comment']获取 django-comments 实例 content_object通用外键 关联到其他类 obj = kwargs['comment'].content_object notification_handler(actor, obj.user, 'C', obj)
def switch_like(self, user): """ 点赞或者取消赞 """ if user in self.liked.all(): self.liked.remove(user) else: self.liked.add(user) notification_handler(user, self.user, 'L', self, id_value=str(self.uuid_id), key='social_update')
def accept_answer(request): """接受回答, AJAX POST 已经被接受的回答不能取消""" answer_id = request.POST["answer"] answer = Answer.objects.get(pk=answer_id) if answer.question.user.username != request.user.username: raise PermissionDenied answer.accept_answer() notification_handler(request.user, answer.user, 'W', answer) return JsonResponse({'status': 'true'})
def switch_like(self, user): """点赞或取消赞""" if user in self.liked.all(): self.liked.remove(user) else: self.liked.add(user) # 通知楼主 notification_handler(user, self.user, "L", self, id_value=str(self.uuid_id), key="social_update")
def switch_like(self, user): '''点赞或取消赞''' # 赞过则取消 # liked多对多外键字段 直接.all() 获取获取数据 if user in self.liked.all(): self.liked.remove(user) # 未赞 则点赞 else: self.liked.add(user) # 点赞时通知楼主 # user 为点赞用户,self.user为动态作者 verb为L action_object 为 当前这条动态 为self # id_value key 为必须参数 key值不同则 notifications.JS触发不同 notification_handler(user, self.user, "L", self, id_value=str(self.uuid_id), key="social_update")
def switch_like(self, user): # user是哪个用户在点赞 """点赞或取消赞""" if user in self.liked.all(): self.liked.remove(user) else: self.liked.add(user) # 通知楼主 if user.username != self.user.username: notification_handler(user, self.user, 'L', self, id_value=str(self.uuid_id), key='social_update')
def accept_answer(request): """ 接受回答,AJAX POST请求 已经被接受的回答用户不能取消 """ answer_id = request.POST["answer"] answer = Answer.objects.get(pk=answer_id) # 如果当前登录用户不是提问者,抛出权限拒绝错误 if answer.question.user.username != request.user.username: raise PermissionDenied answer.accept_answer() # 通知回答者 notification_handler(request.user, answer.user, 'W', answer) return JsonResponse({'status': 'true'}, status=200)
def switch_like(self, user): #若用户已经点赞,则取消点赞 if user in self.liked.all(): self.liked.remove(user) #若用户没有点赞则点赞 else: self.liked.add(user) #通知楼主 notification_handler(user, self.user, 'L', self, id_value=str(self.uuid_id), key='social_update')
def reply_this(self, user, text): #获取父级记录 parent = self.get_parent() News.objects.create( user=user, reply=True, parent=parent, content=text, ) notification_handler(user, parent.user, 'R', parent, id_value=str(parent.uuid_id), key='social_update')
def reply_this(self, user, text): """ 回复首页的动态 :param user: 登录的用户 :param text: 评论内容 :return: None """ parent = self.get_parent() News.objects.create(user=user, content=text, reply=True, parent=parent) notification_handler(user, parent.user, 'R', parent, id_value=str(parent.uuid_id), key='social_update')
def reply_this(self, user, text): """ 回复首页的动态 user -> 登录的用户 test -> 回复的内容 """ # 获取父记录 获取动态 parent = self.get_parent() News.objects.create( user=user, content=text, reply=True, parent=parent ) notification_handler(user, parent.user, "R", parent, id_value=str(parent.uuid_id), key="social_update")
def switch_like(self, user): '''点赞或取消赞''' # 赞过则取消 # liked多对多外键字段 直接.all() 获取获取数据 if user in self.liked.all( ): # self.liked 多对多外键,通过外键查询关联表User的多条记录 相当于User.object.all() self.liked.remove(user) # 未赞 则点赞 else: self.liked.add(user) # 添加赞时通知 楼主 notification_handler(user, self.user, 'L', self, id_value=str(self.uuid_id), key="social_update")
def accept_answer(request): """ 接受回答,Ajax Post 请求 已经被接受的答案用户不能取消 """ answer_id = request.POST["answer"] answer = Answer.objects.get(uuid_id=answer_id) # 如果当前登录用户不是提问者,抛出拒绝错误 if answer.question.user.username != request.user.username: raise PermissionDenied answer.accept_answer() # 通知回答者 # answer: 动作的对象 notification_handler(request.user, answer.user, "W", answer) return JsonResponse({"status": "true"})
def accept_answer(request): """ 接受 ajax post 请求 已经被接受的回答,用户不能取消,只能更换其他更好的唯一回答 """ answer_id = request.POST["answer"] answer = Answer.objects.get(pk=answer_id) # 验证当前登录用户为问题发起人 if answer.question.user.username != request.user.username: # 注意这里需要用值且类型均相同作为判断,不建议用对象做是否相等的判断 raise PermissionDenied answer.accpet_answer() # 通知回答者 notification_handler(request.user, answer.user, "W", answer) return JsonResponse({"status": "true"})
def reply_this(self, user_reply, text_reply): """ 回复首页的动态 :param user_reply: 当前登录的用户 :param text_reply: 回复的内容 :return: None """ parent_obj = self.get_parent() News.objects.create( # uuid_id =uuid.uuid4(), reply=True, user=user_reply, content=text_reply, parent=parent_obj) notification_handler(user_reply, parent_obj.user, "R", parent_obj, id_value=str(parent_obj.uuid_id), key="social_update")
def notify_comment(**kwargs): """文章有评论时,通知作者""" actor = kwargs["request"].user obj = kwargs["comment"].content_object # 获取通用外键 notification_handler(actor, obj.user, "C", obj)