文章点赞
一 视图函数
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:判断,最后返回给前端字典
中的信息

浙公网安备 33010602011771号