Ajax发表评论(Django)
2017-12-29 本文已影响0人
Jummy_Sweet
利用ajax发表评论
1.前言
最近在搞登陆验证以及服务器的东西,加上自己的工作,这次我在我的博客上加了评论,由于时间原因没有看完django的评论系统文档 ,先写着ajax用着先
2.评论
首先做一个div
的标签,里面填写了一个<textarea>
的标签里面填写的是评论内容,由于我是做了登陆的,直接判断到如果没登陆就不能提交而去自动转去登陆页面,在<textarea>
l里面我们定义好id=js-pl-textarea
(id名字你可以另外起,不懂的,建议看下前端基础知识)然后写一个提交按钮,id=js-pl-submit
就完成我们的前端编写
3.编写ajax
假设你的id名字跟我一样,或者自己去换ID名字,那么自己在下方更改
<script type="text/javascript">
$('#js-pl-submit').on('click',function () {
var comments = $('#js-pl-textarea').val()
if(comments == ""){
alert("评论不能为空")
return
}
$.ajax({
cache:false,
type:"POST",
url:"{% url 'comments:addcomment' %}",
data:{'post_id':{{ post.id }},'comments':comments},
async:true,
beforeSend:function (xhr,settings) {
xhr.setRequestHeader("X-CSRFToken","{{ csrf_token }}");
},
success:function (data) {
if (data.status == 'fail'){
if (data.msg == '用户未登录'){
window.location.href = {% url 'login' %};
}else {
alert(data.msg)
}
}else if(data.status == "success"){
window.location.reload()
}
}
})
})
</script>
先是判断里面的提交内容是否为空,通过不为空后,我们在利用ajax的方式POST到后台,data是我们要传去的参数,比方我这里需要传的是第几篇博客,以及评论的内容,beforeSend
这个是我运用防止csrf_token
而success
是为了在次验证是否登陆而已,当然我们也要写好我们的url
是指定到那里
4. 后台
虽然前端为我们验证了登陆,但是作为合格的码农,应该是要前后端验证,所以后端需要在验证多次是否登陆,判断登陆状态,在把前端传过来的第几篇文章去查数据库,然后获取到登陆的用户,以及前端传的来的评论内容,在插入数据库存起,返回去前端
class AddCommentView(View):
def post(self, request):
if not request.user.is_authenticated():
# 判断用户是否登录
return HttpResponse('{"status":"fail", "msg":"用户未登录"}', content_type='application/json')
post_id = request.POST.get('post_id',0)
comments = request.POST.get('comments','')
if int(post_id) >0 and comments:
blog_comments = Comment()
posts = Post.objects.get(id=int(post_id))
posts.views -=1
blog_comments.post = posts
blog_comments.text = comments
blog_comments.name = request.user
blog_comments.save()
posts.save()
return HttpResponse('{"status":"success", "msg":"添加成功"}', content_type='application/json')
else:
return HttpResponse('{"status":"fail", "msg":"添加失败"}', content_type='application/json')
这样我们就能完成我们的评论系统了,具体的可以看我博客,不懂或者有错误,可以留言指正,互相学习