文章点赞
一 视图函数
def poll(request): user_id=request.user.id article_id=request.POST.get("article_id") pollResponse = {"state": True, "is_repeat": None} # if models.Article_poll.objects.filter(user_id=user_id, article_id=article_id): # pollResponse["state"]=False # pollResponse["is_repeat"]="你已经点过了" try: with transaction.atomic(): article_poll=models.Article_poll.objects.create(user_id=user_id,article_id=article_id) models.Article.objects.filter(id=article_id).update(pull_count=F("pull_count")+1) except: pollResponse["state"] = False pollResponse["is_repeat"] = "你已经点过了" return HttpResponse(json.dumps(pollResponse))
二 前端
<div class="updown"> <div class="buryit pull-right"> <span class="burynum" id="bury_count">53</span> </div> <div class="diggit pull-right"> <span class="diggnum" id="digg_count">{{ article_obj.poll_count }}</span> </div> </div> //实现ajax点赞 $(".diggit").click(function () { $.ajax({ url: "/app01/poll/", type: "post", data: { csrfmiddlewaretoken: $("[name='csrfmiddlewaretoken']").val(), article_id: "{{ article_obj.id }}" }, success: function (data) { var data = JSON.parse(data); console.log(data) if (data.state) { var val = parseInt($("#digg_count").html()) + 1; $("#digg_count").html(val) } else { $(".diggnum_error").html("您已经点过赞").css("color", "red") } } }) });
三 view 视图函数中用的模块
from django.db import transaction from django.db.models import F
四流程
ajax点赞 一在HTML中 1寻找点赞按钮,添加点击事件 2写ajax: url,type,data 把data对象转化成新的json格式的data对象 然后判断,是否在state中,如果在,就强转成数字类型 然后添加到HTML页面,如果不是,就返回错误信息 二,后台管理,视图函数中 首先得到用户是当前登录用户,文章是当前用户登录的文章,然后写 一个字典,pollResponse并写入信息,然后取出点赞文章对象以及文 章的点赞数,在进行try:......except:判断,最后返回给前端字典 中的信息