Django点赞的实现示例
作者:365JHWZGo 发布时间:2022-08-24 20:13:40
标签: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;
}
这只是一个大概流程,具体的美化还需要自己实现,不懂得话可以留言来交流!
示意图【我自己做出来的效果】
来源:https://blog.csdn.net/qq_44833392/article/details/123234145


猜你喜欢
- 线程池的概念是什么?在面向对象编程中,创建和销毁对象是很费时间的,因为创建一个对象要获取内存资源或者其它更多资源。在Java中更是 如此,虚
- Python用Pillow(PIL)进行简单的图像操作方法颜色与RGBA值计算机通常将图像表示为RGB值,或者再加上alpha值(通透度,透
- if exists (select * from dbo.sysobjects where id = object_id(N'[db
- 前段时间写了一个百度图片下载器,结果发现有很多人需要使用。说实话之前写的那一款百度图片下载器比较LOW,今天刚好有时间就做了一下升级。更新了
- Todo清单需要实现的功能有添加任务、删除任务、编辑任务,操作要关联数据库。任务需要绑定用户,部门。用户需要绑定部门。{#自己编写一个基类模
- 我们经常会要用到页面的包含这样东西. 在asp.net 我开始也还是习惯用asp中的include 用起来感觉很麻烦.
- 1.多态是指传入不同的对象,产生不同的结果多态指的是一类事物有多种形态(一个抽象类有多个子类,因而多态的概念依赖于继承)定义:多态是一种使用
- 当一个函数进行完成后需要重定向到一个带参数的urlURLpath('peopleapply/<int:jobid>/
- 本文实例为大家分享了python爬取微信公众号文章的具体代码,供大家参考,具体内容如下该方法是依赖于urllib2库来完成的,首先你需要安装
- 一、什么是组件组件 (Component) 是 Vue.js 最强大的功能之一。组件可以扩展 HTML 元素,封装可重用的代码。二、组件用法
- 引言最近两年都是在使用 react 进行项目开发,看技术博客都是针对 react 和 javaScript 高级方面的,对 vue 的知识基
- <!doctype><html><head><title>新闻图片轮换类</title
- 口罩佩戴检测一 题目背景1.1 实验介绍今年一场席卷全球的新型冠状病毒给人们带来了沉重的生命财产的损失。有效防御这种传染病毒的方法就是积极佩
- 前言春联是中国传统文化中最具内涵的元素之一,它以对仗工整、简洁精巧的文字描绘美好形象,抒发美好愿望,是中国特有的文学形式,是华人们过年的重要
- 最近在做公司的某个从项目,基本设计和淘宝登陆页类似: 1)文本框内容为空是,文本框右侧无清除按钮,当有内容时立即显示清除按钮;2)当文本框失
- 例如,有一个字典如下:>>> dic = {"name": "botoo",&qu
- 我在网上查找了下接口测试相关的资料,大都重点是以数据驱动的形式,将用例维护在文本或表格中,而没有说明怎么样去生成想要的用例,问题:测试接口时
- 接着上一篇学习:https://www.jb51.net/article/70528.htm七、MySQL数据库Schema设计的性能优化高
- import sysimport urllibfrom urllib import requestimport osfrom bs4 imp
- Pygame 中提供了一个draw模块用来绘制一些简单的图形状,比如矩形、多边形、圆形、直线、弧线等。pygame.draw模块的常用方法如