djiango ajax,django + ajax 开发给文章点赞功能遇到的问题

django 1.11 python 2.7

开发了一个给文章与评论点赞的功能。

下面的是代码:

models:

class New_Likes(models.Model):

likes_num = models.IntegerField(default = 0) #点赞数

author = models.ForeignKey(settings.AUTH_USER_MODEL) #点赞用户

pub_date = models.DateTimeField(auto_now_add=True) #点赞时间

#用了ContentType, 主要是针对文章(Topic), 评论(Reply)点赞

content_type = models.ForeignKey(ContentType)

object_id = models.IntegerField()

content_object = GenericForeignKey('content_type', 'object_id')

def __unicode__(self):

return u'%s:%s%s' % (self.content_type, self.object_id, self.likes_num)

view.py里面:

@login_required

@csrf_exempt

def Add_New_Likes(request, pk_id, obj_type):

# pk_id = request.GET.get('pk_id')

# obj_type = request.GET.get('obj_type')

user = request.user

ret = {'dataa':None , 'status':False}

c = ContentType.objects.get(model = obj_type)

#这个 try 是看看这个模型(如文章Topic),id 有没有其它用户给点过赞。

#如果有的话把赞数取出来。作为下面新用户点赞数+1 并存到数据库里。

#作为前台调用用。但是这里的点赞数,一直反回不对。

try:

nnew_likes = New_Likes.objects.filter(content_type=c, object_id = pk_id)

likes_num = nnew_likes[0].likes_num

print ('nnew_likes', likes_num)

except:

likes_num = 0

try:

#这里如果能得到new_lies 说明该用户已经点赞过,

#那么赞数不再增加直接反回给前端,以json的格式反回,这里的点赞数,一直反回不对

new_likes = New_Likes.objects.get(content_type=c, object_id = pk_id, author = user)

ret['dataa'] = new_likes.likes_num

ret['status'] = 1

return JsonResponse(ret)

except Exception, e:

#如果当前用户没有对该文章点赞,那么就新建一个赞,

#并让赞数+1,以json格式反回前端,

new_likes = New_Likes(content_type = c, object_id = pk_id, author = user)

new_likes.likes_num = likes_num + 1

new_likes.save()

ret['dataa'] = new_likes.likes_num

ret['status'] = 0

return JsonResponse(ret)

urls.py:

url(r'^new_addlikes/(?P\d+)/(?P[\w+]+)/$', Add_New_Likes, name = 'add_new_likes'),

前端js+html代码是这样的:里面假设给文章(Topic)点赞

点赞

//问题:这里一般点赞后面都跟着一个,点赞数量,

//而且是实时出来的。不知道怎么调出来的?

function likes_topic(){

$.ajax({

type:'POST',

url:'{% url "bbs:add_new_likes" topic.id "topic" %}',

data:{'pk_id':{{topic.id}}, 'obj_type': 'topic'},

dataType:'json',

processData:false, // 告诉jquery不转换数据

contentType:false, // 告诉jquery不设置内容格式

success:function(data, status){

if(data.status == 1){

alert('已经赞过!');

}

else{

alert('点赞成功!');

}

}

});

}

以上是我写的。代码的功能也是我看了别人的代码自已想像的。至于功能我都写在上面注释里了,但是实际情况并不是像我想的那样。点赞数,一直反回的不对!

上面代码可能有很多逻辑错误。由于自已能力有现。不知怎么能正常实现点赞功能并用ajax调用在前台。

请各位朋友帮我看看。

感谢!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值