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 点赞内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python3中urllib库添加请求头的两种方式

    Python3中urllib库添加请求头的两种方式

    Python 3中的urllib模块可以用来处理URL,包括下载和上传文件、创建和读取cookie、访问Web API等,本文给大家介绍Python3中urllib库添加请求头的两种方式,感兴趣的朋友一起看看吧
    2023-10-10
  • Python中使用PyHook监听鼠标和键盘事件实例

    Python中使用PyHook监听鼠标和键盘事件实例

    这篇文章主要介绍了Python中使用PyHook监听鼠标和键盘事件实例,这个库依赖于另一个Python库PyWin32,并且只能运行在Windows平台,需要的朋友可以参考下
    2014-07-07
  • django限制匿名用户访问及重定向的方法实例

    django限制匿名用户访问及重定向的方法实例

    这篇文章主要给大家介绍了关于django限制匿名用户访问及重定向的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2018-02-02
  • python3 动态模块导入与全局变量使用实例

    python3 动态模块导入与全局变量使用实例

    今天小编就为大家分享一篇python3 动态模块导入与全局变量使用实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-12-12
  • python的自变量选择(所有子集回归,后退法,逐步回归)

    python的自变量选择(所有子集回归,后退法,逐步回归)

    这篇文章主要介绍了python的自变量选择(所有子集回归,后退法,逐步回归),文章围绕主题展开详细的内容介绍,具有一定的参考价值,感兴趣的小伙伴可以参考一下
    2022-06-06
  • 使用python PIL库批量对图片添加水印的过程详解

    使用python PIL库批量对图片添加水印的过程详解

    平常我们想给某些图片添加文字水印,方法有很多,也有很多的工具可以方便的进行,今天主要是对PIL库的应用,结合Python语言批量对图片添加水印,文章通过代码示例给大家介绍的非常详细,感兴趣的同学可以参考一下
    2023-11-11
  • python实现excel读写数据

    python实现excel读写数据

    这篇文章主要为大家详细介绍了python操作EXCEL读数据、写数据的实例源码,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-04-04
  • Pyqt5实战小案例之界面与逻辑分离的小计算器程序

    Pyqt5实战小案例之界面与逻辑分离的小计算器程序

    网上很多PyQt5信号槽与界面分离的例子,但是真正开发起来很不方便,下面这篇文章主要给大家介绍了关于Pyqt5实战小案例之界面与逻辑分离的小计算器程序,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-02-02
  • Python3安装Pymongo详细步骤

    Python3安装Pymongo详细步骤

    本篇文章主要介绍了Python3安装Pymongo详细步骤,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-05-05
  • python基于numpy的线性回归

    python基于numpy的线性回归

    这篇文章主要为大家详细介绍了python基于numpy的线性回归,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-07-07

最新评论