点赞
-
点赞的过程:数字增加,并在后台点赞表记录数据
-
需要发过去的数据:用户id,新闻id
-
用户id从session里获得,那新闻id怎么获取呢?这想到分页是循环新闻列表来展示内容,循环的新闻id可以做为参数传入事件中(在事件里发送ajax请求),看前端代码:
<div class="content-list" id="content_list"> {% for item in new_list %} <div class="item"> <a onclick="Favor(this,{{item.nid}})">点赞9</a> </div> {% end %} </div>
-
点赞数就在后台根据新闻id去统计对应的客户id数(点赞表中 )或者在新闻表在加一个字段--点赞数(favor_count),每次点了赞加个1
-
没点赞的,点了+1,点了赞的,再点-1
代码实现:
1、后端render+ list【新闻1,新闻2...】 前端{{% for item in new_list %}} 点赞标签绑定onclick=‘func(this,{{item.nid}})’
2、js:后台会返回一个操作编码,让前端判断,是加1操作,还是减1操作
function DoFavor(ths,nid){ //nid 新闻id //只有登录状态才能发送点赞ajax请求 //获取特定登陆状态标签的属性值 if($(‘#action_nav‘).attr(‘is-login‘) == ‘true‘){ $.ajax({ url:‘/favor‘, type:‘POST‘, data:{news_id:nid}, dataType:‘json‘, success:function(arg){ if(arg.status){ //获取新闻点赞数显示标签 var $favorCount = $("#favor_count_"+nid); //获取点赞数 var c = parseInt($favorCount.text()); if(arg.code == 2301){ //更新显示 $favorCount.text(c+1); //给点赞图像加上活动状态 $(ths).find(‘span‘).addClass("active"); //加动态效果 AddFavorAnimation(ths); }else if(arg.code == 2302){ //更新显示 $favorCount.text(c-1); //给点赞图像去除活动状态 $(ths).find(‘span‘).removeClass(‘active‘); //动画效果 } } } }) } }
3、后台判断处理
class FavorHandler(BaseRequestHandler): #装饰器主要做了一件---对用户登陆状态进行验证,如果没登录,就不会执行post方法 @decrator.auth_login_json def psot(self,*args,**kwargs): #这对象相当于以前的字典,用封装错误信息,数据,状态 rep = BaseResponse() news_id = self.get_argument("news_id",None) if not news_id: rep.summary = ‘新闻ID不能为空‘ else: user_info_id = self.session[‘user_info‘][‘nid‘] #创建链接 conn = ORM.session #去数据库看看有没有已经点赞 has_favor = conn.query(ORM.Favor).filter(ORM.Favor.user_info_id == user_info_id, ORM.Favor.news_id == new_id).count() #如果已赞,再点就是取消赞 if has_favor: #取消赞就去点赞表里把那条数据删除 conn.query(ORM.Favor).filter(ORM.Favor.user_inro_id == user_info_id, ORM.Favor.news_id == news_id).delete() #并在新闻表里修改点赞数-1 conn.query(ORM.News).filter(ORM.News.nid == news_id).update( {"favor_count":ORM.News.favor_count - 1},synchronize_session=‘evaluate‘ ) #设置编码 rep.code = StatusCodeEnum.FavorMinus #如果没赞,加赞 else: #给点赞表增加数据 conn.add(ORM.Favor(user_info_id=user_info_id,news_id=news_id,ctime=datetime.datetime.now)) #给新闻表的点赞跟新+1 conn.query(ORM.News).filter(ORM.News.nid == news_id).update( {‘favor_count‘:ORM.News.favor_count + 1},synchronize_session=‘evaluate‘ ) rep.code = StatusCodeEnum.FavorPlus conn.commit() conn.close() rep.status = True self.write(json.dumps(rep.__dict__))
4、配置编码
FavorPlus = 2301 FavorMinus = 2302 class BaseRespinse: def __init__(self): self.status = False self.code = StatusCodeEnum.Success self.data = None self.summary = None self.message = {}
评论树
- 评论树默认不展开,点击后展开,display:None
- 刚开始看到的新闻是没有评论数据的,只有点击了后才有,本质上就偷偷发了请求给后台,然后把评论数据返回显示在页面上
原文地址:https://www.cnblogs.com/xinsiwei18/p/5869717.html
时间: 2024-11-08 18:33:44