抽屉之Tornado实战(5)--点赞与评论树
点赞
-
点赞的过程:数字增加,并在后台点赞表记录数据
-
需要发过去的数据:用户id,新闻id
-
用户id从session里获得,那新闻id怎么获取呢?这想到分页是循环新闻列表来展示内容,循环的新闻id可以做为参数传入事件中(在事件里发送ajax请求),看前端代码:
1 2 3 4 5 6 7 | <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操作
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | 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、后台判断处理
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | 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' )<br> rep.code = StatusCodeEnum.FavorPlus conn.commit() conn.close() rep.status = True self .write(json.dumps(rep.__dict__)) |
4、配置编码
1 2 3 4 5 6 7 8 9 10 11 | 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
- 刚开始看到的新闻是没有评论数据的,只有点击了后才有,本质上就偷偷发了请求给后台,然后把评论数据返回显示在页面上
如果您觉得阅读本文对您有帮助,请点一下“推荐”按钮,您的“推荐”将是我最大的写作动力!欢迎各位转载,但是未经作者本人同意,转载文章之后必须在文章页面明显位置给出作者和原文连接,否则保留追究法律责任的权利。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步