BBS项目分布搭建五(评论相关)
1. 根评论逻辑实现
# 在models.py文件中 修改:
# 7. 评论表
parent = models.ForeignKey(to='self', null=True)
# 添加路由(最好放在文章详情之上):
# 评论功能
url(r'^comment/', views.comment),
# 在views.py中 添加功能:
# 10. 评论功能
def comment(request):
if request.is_ajax() and request.method == 'POST':
back_dic = {'status': 200, 'msg': '评论成功'}
# 1. 接收参数
content = request.POST.get('content')
article_id = request.POST.get('article_id')
# 2. 验证参数
if not content:
back_dic['status'] = 1013
back_dic['msg'] = '评论内容不能为空哦~'
return JsonResponse(back_dic)
if not article_id:
back_dic['status'] = 1014
back_dic['msg'] = '评论的文章不存在'
return JsonResponse(back_dic)
# 3. 验证是否登录,验证尽量的完善
if not request.session.get('username'):
back_dic['status'] = 1015
back_dic['msg'] = '请先登录在评论'
return JsonResponse(back_dic)
# 4. 处理评论逻辑
# 4.1 操作评论表,文章表(评论数)
# 3.2 事务:保证数据安全,ACID四大特性,原子性,保证的是同一个事务中的SQL必须同时成功,同时失败
# 3.3 在企业中,遇到跟财务相关的需求,尽量都要使用事务
from django.db import transaction
with transaction.atomic():
models.Article.objects.filter(pk=article_id).update(comment_num=F('comment_num') + 1)
models.Comment.objects.create(
content=content,
article_id=article_id,
user_id=request.session.get('id'),
)
return JsonResponse(back_dic)
return HttpResponse('ok')
# 修改article_detail.html文件
# 在 {% block content %} 标签中添加以下内容:
{# 评论样式开始#}
{% if request.session.username %}
发表评论
{% endif %}
{# 评论样式结束#}
# 在 {% block js %} 标签中添加以下内容:
// 提交评论
$(".commit").click(function () {
// 先获取评论内容
var content = $('#content').val();
var article_id = '{{ article_id }}'; // 拿到文章id比对
// 提交ajax
$.ajax({
url: '/comment/',
type: 'post',
data: {'content': content, article_id: article_id, },
success: function (res) {
console.log(res);
}
})
})
2. 评论内容前端列表样式准备
# 修改article_detail.html文件
# 在 {% block content %}标签中添加:
{# 评论列表开始#}
评论列表
一剑断万古! 他化自在,他化万古!
一剑断万古! 他化自在,他化万古!
一剑断万古! 他化自在,他化万古!
一剑断万古! 他化自在,他化万古!
一剑断万古! 他化自在,他化万古!