点赞
-
点赞的过程:数字增加,并在后台点赞表记录数据
-
需要发过去的数据:用户id,新闻id
-
用户id从session里获得,那新闻id怎么获取呢?这想到分页是循环新闻列表来展示内容,循环的新闻id可以做为参数传入事件中(在事件里发送ajax请求),看前端代码:
<div class="content-list" id="content_list">{% for item in new_list %}<div class="item"><a οnclick="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 %}} 点赞标签绑定οnclick=‘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_jsondef 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()#并在新闻表里修改点赞数-1conn.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))#给新闻表的点赞跟新+1conn.query(ORM.News).filter(ORM.News.nid == news_id).update({'favor_count':ORM.News.favor_count + 1},synchronize_session='evaluate')
rep.code = StatusCodeEnum.FavorPlusconn.commit()conn.close()rep.status = Trueself.write(json.dumps(rep.__dict__))
4、配置编码
FavorPlus = 2301
FavorMinus = 2302class BaseRespinse:def __init__(self):self.status = Falseself.code = StatusCodeEnum.Successself.data = Noneself.summary = Noneself.message = {}
评论树
- 评论树默认不展开,点击后展开,display:None
- 刚开始看到的新闻是没有评论数据的,只有点击了后才有,本质上就偷偷发了请求给后台,然后把评论数据返回显示在页面上