Django如何实现点赞、收藏以及浏览量增减

Django如何实现点赞、收藏以及浏览量增减

前言

最近有人私信我,问点赞的功能是如何实现出来的,可能我之前写的教程是关于前端如何实现【html、js以及css】,那么今天就来写一篇后端如何实现的吧!

回顾

如何前端不会实现的话可以参考我的文章:
Django如何简单实现点赞功能

代码实现

# 讨论点赞
def addLikes(request,id):
    user = findCurrentUser(request)
    # 判断 discuss_id 是否在discussions中,如果存在
    try:
        if Discussion.objects.get(id=id):
            d = Discussion.objects.get(id=id)
            if user:
                record,flag = LikeNum.objects.get_or_create(user=user,discussion=d,reply=None)
                if flag:
                    d.increase_likes()
                else:
                    d.likes -= 1
                    d.save()
                    LikeNum.objects.get(user=user,discussion=d).delete()
                return redirect('/detail/%s'%(d.id))
            else:
                return redirect('/login')  
    except Exception as e:
        # 否则跳转到失败页面
        return HttpResponseRedirect('/error')

# 回复点赞
def addRLikes(request,id):
    user = findCurrentUser(request)
    try:
        if Reply.objects.get(id=id):
            r = Reply.objects.get(id=id)
            d = r.discussion
            if user:
                record,flag = LikeNum.objects.get_or_create(user=user,discussion=None,reply=r)
                if flag:
                    r.increase_rlikes()
                else:
                    r.rlikes -= 1
                    r.save()
                    LikeNum.objects.get(user=user,reply=r).delete()
                return redirect('/detail/%s'%(d.id))
            else:
                return redirect('/login')  
    except Exception as e:
        # 否则跳转到失败页面
        return HttpResponseRedirect('/error')


# 浏览量增加
def addViews(request,id):
    user = findCurrentUser(request)
    try:
        if Discussion.objects.get(id=id):
            d = Discussion.objects.get(id=id)
            # 讨论回复数+1
            if user:
                d.increase_views()
            return redirect('/detail/%s'%(d.id))
    except:
        # 否则跳转到失败页面
        return HttpResponseRedirect('/error')

# 收藏
def addFavs(request,id):
    user = findCurrentUser(request)
    try:
        if Reply.objects.get(id=id):
            r = Reply.objects.get(id=id)
            d = r.discussion
            if user:
                record,flag = FavNum.objects.get_or_create(user=user,discussion=None,reply=r)
                if flag:
                    r.increase_rfavs()
                    fav = Fav.objects.create(discussion=d,reply=r,user=user)
                else:
                    r.rfavs -= 1
                    r.save()
                    FavNum.objects.get(user=user,reply=r).delete()
                    Fav.objects.get(discussion=d,reply=r,user=user).delete()
                return redirect('/detail/%s'%(d.id))
            else:
                return redirect('/login')  
    except Exception as e:
        # 否则跳转到失败页面
        print(e)
        return HttpResponseRedirect('/error')

models.py

class Data(models.Model):
    question = models.CharField("问题",max_length=100,)
    reply = models.CharField("回答",max_length=300)
    likes = models.PositiveIntegerField('点赞数',default=0)
    favs = models.PositiveIntegerField('收藏数',default=0)
    created_time = models.DateTimeField("创建时间",auto_now_add=True)
    updated_time = models.DateTimeField("更新时间",auto_now=True)

    class Meta:
        verbose_name_plural = 'Data'
    
    def __str__(self):
        return self.question


# 我的讨论
class Discussion(models.Model):
    title = models.CharField("题目",max_length=30)
    content = models.TextField("内容",max_length=4000)
    user = models.ForeignKey(UserInfos,null=True,on_delete=models.SET_NULL)
    discussion_created_time = models.DateTimeField("创建时间",auto_now_add=True)
    views = models.PositiveIntegerField("浏览次数",default=0,editable=False)
    likes = models.PositiveIntegerField("喜欢",default=0,editable=False)
    replys = models.PositiveIntegerField("回复数",default=0,editable=False)
    class Meta:
        verbose_name_plural = 'Discussion'
    def __str__(self):
        return self.title
    def increase_views(self):
        self.views += 1
        self.save(update_fields=['views'])
    def increase_likes(self):
        self.likes += 1
        self.save(update_fields=['likes'])
    def increase_replys(self):
        self.replys += 1
        self.save(update_fields=['replys'])
    
# 我的回复
class Reply(models.Model):
    user = models.ForeignKey(UserInfos,null=True,on_delete=models.SET_NULL)
    discussion = models.ForeignKey(Discussion,null=True,on_delete=models.SET_NULL)
    answer = models.TextField("回答",max_length=4000,default="")
    rlikes = models.PositiveIntegerField("回答喜欢数",default=0,editable=False)
    rfavs = models.PositiveIntegerField("回答收藏数",default=0,editable=False)
    reply_created_time = models.DateTimeField("创建时间",auto_now_add=True)
    class Meta:
        verbose_name_plural = 'Reply'
    def __str__(self):
        return self.answer
    def increase_rlikes(self):
        self.rlikes += 1
        self.save(update_fields=['rlikes'])
    def increase_rfavs(self):
        self.rfavs += 1
        self.save(update_fields=['rfavs'])
    
    

# 我的收藏
class Fav(models.Model):
    discussion = models.ForeignKey(Discussion,null=True,on_delete=models.SET_NULL)
    reply = models.ForeignKey(Reply,null=True,on_delete=models.SET_NULL)
    # 回复人
    user = models.ForeignKey(UserInfos,null=True,on_delete=models.SET_NULL)
    class Meta:
        verbose_name_plural = 'Favorite'

总结

这是之前写的代码,现在也过去了五六个月了,你要问我具体怎么搞,我也难说,还得全靠你自己琢磨,不过你那么聪明,这应该不难吧!hha!

  • 5
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

365JHWZGo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值