Django点赞的实现示例

 更新时间:2022年03月04日 09:25:55   作者:365JHWZGo  
本文主要介绍了Django点赞的实现示例,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

1.前期准备

用户models.py

class User(models.Model):
    username = models.CharField("用户名",max_length=10)

点赞models.py
LikeNum的作用在于当有人点赞时可以把它记录下来,包括点赞者和点赞的内容

# 喜欢数
class LikeNum(models.Model):
    user = models.ForeignKey(UserInfos,null=True,on_delete=models.SET_NULL)
    discussion = models.ForeignKey(Discussion,null=True,on_delete=models.SET_NULL)
    class Meta:
        verbose_name_plural = 'user'

发布models.py
Discusssion的作用在于渲染前端页面,里边包括动态发布人和被点赞数量

# 我的讨论
class Discussion(models.Model):
    user = models.ForeignKey(UserInfos,null=True,on_delete=models.SET_NULL)
    likes = models.PositiveIntegerField("喜欢",default=0,editable=False)
    class Meta:
        verbose_name_plural = 'Discussion'

views.py

# 讨论点赞
def addLikes(request,id):
    # 识别出该登陆者用户信息
    if request.session.get('username') and request.session.get('uid'):
        username = request.session.get('username')
        user = UserInfos.objects.get(username=username)
    else:
        # error 是自己写的出错页面
        return HttpResponseRedirect('/error')
        
    # 判别点赞的该Discussion是否存在,有可能在你点赞的时候该用户已经删除,注意不能简单的使用if,else当找不到discussion时会出错
    try:
        if Discussion.objects.get(id=id):
            # 如果Discussion存在
            d = Discussion.objects.get(id=id)
            # 如果User存在
            if user:
                # 判断当前用户是否已经给该Discussion点过赞
                # record 为该记录,不存在时则自动创建
                # flag 为当前是否操作
                record,flag = LikeNum.objects.get_or_create(user=user,discussion=d)
                # 如果刚刚创建
                if flag:
                    d.likes+=1
                    d.save()
                # 如果没操作,说明之前点过赞,此时再次点赞说明是要取消点赞
                else:
                    d.likes -= 1
                    d.save()
                    # 并且删除掉点赞记录
                    LikeNum.objects.get(user=user,discussion=d).delete()
                # 跳转到发布页面
                return render(request,'page.html',{'page':Discusssion.objects.all(),'ln':LikeNum.objects.fitter(user=user)})
            else:
                # 如果session中没有用户信息,则跳转到登陆页面
                return redirect('/login')  
    except Exception as e:
        # 否则跳转到失败页面
        return HttpResponseRedirect('/error')

2.html实现

{% for item in page %}
<div>
    用户名:{{item.user.username}}
  <a id="id{{item.id}}">
       <svg class="icon" aria-hidden="true">
               <use xlink:href="#icon-like-fill" rel="external nofollow" ></use>
           </svg>
       <span id="nlikes">{{item.likes}}</span>
   </a>
</div>
<!-- 请把我写在这里 3.js实现 --!>
{% endfor %}

3.js实现【!!!注意这段代码写在for循环之内】

//ln指likenum【点赞数】,因为点赞记录是QuerySet,需要从里边遍历
 {% if ln %} 
 // 遍历
 {% for l in ln %} 
 // 当当前的discussion在LikeNum记录里时,为a标签添加一个class
 {% if l.discussion == item %}
    <script>
        obj = document.getElementById('id{{item.id}}');
        obj.className = 'success';
    </script>
{% endif %} 
{%endfor%} 
{%endif%}

4.css实现

.success {
    color: #fc5531;
    text-decoration: none;
}

a {
    text-decoration: none;
    color: #848B96;
}

a:hover {
    color: #fc5531;
}

这只是一个大概流程,具体的美化还需要自己实现,不懂得话可以留言来交流!

示意图【我自己做出来的效果】

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

 到此这篇关于Django点赞的实现示例的文章就介绍到这了,更多相关Django 点赞内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python写代码的七条重要技巧介绍

    Python写代码的七条重要技巧介绍

    大家好,本篇文章主要讲的是Python写代码的七条重要技巧介绍,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览
    2021-12-12
  • Django错误:TypeError at / ''bool'' object is not callable解决

    Django错误:TypeError at / ''bool'' object is not callable解决

    这篇文章主要介绍了Django 错误:TypeError at / 'bool' object is not callable解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-08-08
  • Python实战之梦幻钢琴小游戏的实现

    Python实战之梦幻钢琴小游戏的实现

    这篇文章主要为大家详细介绍了如何利用Python语言编写一款界面化的(Tkinter)电子钢琴小程序,文中的示例代码讲解详细,感兴趣的可以了解一下
    2023-02-02
  • python3应用windows api对后台程序窗口及桌面截图并保存的方法

    python3应用windows api对后台程序窗口及桌面截图并保存的方法

    今天小编就为大家分享一篇python3应用windows api对后台程序窗口及桌面截图并保存的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-08-08
  • pandas进阶教程之Dataframe的apply方法

    pandas进阶教程之Dataframe的apply方法

    DataFrame中的apply方法就是将函数应用到由列或行形成的一维数组上,下面这篇文章主要给大家介绍了关于pandas进阶教程之Dataframe的apply方法的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-09-09
  • 关于Django显示时间你应该知道的一些问题

    关于Django显示时间你应该知道的一些问题

    将Django项目部署到Linux系统上进行测试时,发现操作记录的时间与服务器的时间不一致,相差13个小时。这主要是因为时区的问题,下面这篇文章主要总结介绍了关于Django显示时间你应该知道的一些问题,需要的朋友可以参考下。
    2017-12-12
  • python机器学习pytorch 张量基础教程

    python机器学习pytorch 张量基础教程

    这篇文章主要为大家介绍了python机器学习pytorch 张量基础教程,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-10-10
  • python同时遍历数组的索引和值的实例

    python同时遍历数组的索引和值的实例

    今天小编就为大家分享一篇python同时遍历数组的索引和值的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-11-11
  • 人工智能——K-Means聚类算法及Python实现

    人工智能——K-Means聚类算法及Python实现

    这篇文章主要介绍了人工智能——K-Means聚类算法及Python实现,一个能够找到我圈出的这 些点集的算法,就被称为聚类算法,下面就来看看文章具体的介绍吧
    2022-01-01
  • python灰色预测法的具体使用

    python灰色预测法的具体使用

    灰色系统理论认为对既含有已知信息又含有未知或非确定信息的系统进行预测,本文就介绍了python灰色预测法的具体使用,具有一定的参考价值,感兴趣的可以了解一下
    2022-03-03

最新评论