BBS项目分布搭建四(点赞点踩及评论功能准备)
BBS项目分布搭建四(点赞点踩及评论功能) 1. 点赞点踩样式准备
# 在base.html文件中 head标签内 添加css模块:
{% block css %}{% endblock %}# 修改 article_detail.html内容:
{% extends 'base.html' %}{% block css %}#div_digg {
float: right;
margin-bottom: 10px;
margin-right: 30px;
font-size: 12px;
width: 125px;
text-align: center;
margin-top: 10px;
}.diggit {
float: left;
width: 46px;
height: 52px;
background: url(/static/img/upup.gif) no-repeat;
text-align: center;
cursor: pointer;
margin-top: 2px;
padding-top: 5px;
}.buryit {
float: right;
margin-left: 20px;
width: 46px;
height: 52px;
background: url(/static/img/downdown.gif) no-repeat;
text-align: center;
cursor: pointer;
margin-top: 2px;
padding-top: 5px;
}.clear {
clear: both;
}.diggword {
margin-top: 5px;
margin-left: 0;
font-size: 12px;
color: #808080;
}{% endblock %}{% block content %}
{{ article_detail.title }}{{ article_detail.content|safe }}{#点赞点踩样式开始#}{{ article_detail.up_num }}{{ article_detail.down_num }}{#点赞点踩样式结束#}
{% endblock %}
文章图片
2. 前端逻辑书写
# 在base.html文件中 body标签内 添加:
{% block js %}{% endblock %}
# 在 article_detail.html 添加js模块:
{% block js %}{% endblock %}# 在views.py中添加功能:
# 9. 点赞点踩
def up_or_down(request):
print(123)# 添加路由:
# 点赞点踩表
url(r'^up_or_down/', views.up_or_down),
文章图片
3. 后端逻辑实现
# 在views.py中添加 点赞点踩功能:import json
from django.db.models import F# 9. 点赞点踩
def up_or_down(request):
'''
1. 验证登录
2. 验证是不是自己发布的文章,自己的文章不能点击
3. 验证是否已经被点击过,如果点击过了,就不要在点了
4. 正常入库
4.1 点赞点踩表要操作
4.2 文章表也要操作
:param request:
:return:
'''
if request.method == 'POST':
user_id = request.session.get('id')
back_dic = {'status': 200, 'msg': '支持成功', 'data': {}}# 1. 接收参数
is_up = request.POST.get('is_up')# true
article_id = request.POST.get('article_id')
# print(is_up, type(is_up))# 2. 验证参数是否登录
if not request.session.get('username'):
back_dic['status'] = 1010
back_dic['msg'] = '请先登录'
return JsonResponse(back_dic)# 验证是不是自己的文章
article_obj = models.Article.objects.filter(pk=article_id).first()
# 通过文章查用户,
if article_obj.blog.userinfo.username == request.session.get('username'):
# 当前点击的文章是自己的
back_dic['status'] = 1011
back_dic['msg'] = '不能点击自己的文章哦,宝贝~'
return JsonResponse(back_dic)# 验证是否点击过,参考点赞点踩表
is_click = models.UpAndDown.objects.filter(article_id=article_id, user_id=user_id).first()
if is_click:
# 已经点过
back_dic['status'] = 1012
back_dic['msg'] = '你已经点过喽,宝贝~'
return JsonResponse(back_dic)# 对传递过来的参数is_up做反序列话,需要转为布尔值
is_up = json.loads(is_up)
print(is_up, type(is_up))if is_up:
# 操作文章表
models.Article.objects.filter(pk=article_id).update(up_num=F('up_num') + 1)
back_dic['msg'] = '点赞成功'
else:
# 点踩
models.Article.objects.filter(pk=article_id).update(down_num=F('down_num') + 1)
back_dic['msg'] = '反对成功'# 操作点赞点踩表
models.UpAndDown.objects.create(is_up=is_up, article_id=article_id, user_id=user_id)
return JsonResponse(back_dic)# 修改article_detail.html:$('.active').click(function () {
var is_up = $(this).hasClass('diggit');
// true false
var article_id = '{{ article_id }}';
// 发送ajax请求
$.ajax({
url: '/up_or_down/',
type: 'post',
data: {'is_up': is_up, article_id: article_id},
success: function (res) {
console.log(res);
if (res.status == 200) {
layer.msg(res.msg)
} else if (res.status == 1010) {
$('.error_msg').append(res.msg)
} else {
layer.msg(res.msg)
}
}
})
})# 添加路由 :
# 点赞点踩表
url(r'^up_or_down/', views.up_or_down),"""
注意:::
所有路由 最好短的放上面 避免匹配不到对应路由就已经结束匹配!!!
"""
文章图片
4. 前端逻辑实现
# 修改article_detail.html:{% block js %}{% endblock %}
文章图片
文章图片
5. 评论样式准备
# 修改article_detail.html:
{#点赞点踩样式结束#}{#评论样式开始#}发表评论
{#评论样式结束#}{% endblock %}
【BBS项目分布搭建四(点赞点踩及评论功能准备)】
文章图片
推荐阅读
- 9.Flink实时项目之订单宽表
- Java|SpringBoot入门项目-基于JPA的App日记后台系统之数据库的创建与JPA的CRUD(二)
- MySQL 分布式事务的“路”与“坑”
- 工程师计划3|工程师计划3 -> 项目管理2 | 项目组织与团队管理
- 明火烟雾目标检测项目部署(YoloV5+Flask)
- 面试题|分布式事务面试题 (史上最全、持续更新、吐血推荐)
- Eclipse项目分包管理
- 天翼云联手平凯星辰共建开源分布式数据库实验室
- 使用APICloud开发物流仓储app项目实践
- 资讯|机器人操控电脑,华为天才少年稚晖君再出手,直呼(项目不太难)