<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>
代码实现:
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 = {}
原文:https://www.cnblogs.com/xinsiwei18/p/5869717.html