猿问

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

django1.11python2.7开发了一个给文章与评论点赞的功能。下面的是代码:
models:
classNew_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):
returnu'%s:%s%s'%(self.content_type,self.object_id,self.likes_num)
view.py里面:
@login_required
@csrf_exempt
defAdd_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
returnJsonResponse(ret)
exceptException,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
returnJsonResponse(ret)
urls.py:
url(r'^new_addlikes/(?P\d+)/(?P[\w+]+)/$',Add_New_Likes,name='add_new_likes'),
前端js+html代码是这样的:里面假设给文章(Topic)点赞
点赞
//问题:这里一般点赞后面都跟着一个,点赞数量,
//而且是实时出来的。不知道怎么调出来的?
functionlikes_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调用在前台。请各位朋友帮我看看。感谢!!!
呼如林
浏览 448回答 2
2回答

慕后森

多谢。正在慢慢理解这块代码。基本已解决。还有一个就是在前端html点赞(点赞数)这里的点赞数怎么无刷新更新,目前我能想到的是在文章topic的models下建defget_add_likes_num(self):returnself.new_likes.count()然后这样调用:点赞({{topic.get_add_likes_num}})这样需要刷新一下才会看到点赞数+1不知道怎么让这里点赞后无刷新更新这里?
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答