数据库模型设计
昨天我们在前端中通过ajax提交了评论者姓名/昵称、email、网址、评论内容四个字段,那我们肯定在模型中肯定要包含这四个字段
from django.db import models
from blog.models import Article
from django.contrib.contenttypes.models import ContentType
from django.contrib.auth.models import User
# Create your models here.
class Comment(models.Model):
# 对应的文章
post = models.ForeignKey(Article,on_delete=models.DO_NOTHING)
comment = models.TextField('评论内容')
name = models.CharField('评论者',max_length=20)
email = models.CharField('email',max_length=20)
url = models.CharField('网站',max_length=20,blank=True)
reply_time = models.DateTimeField('回复时间',auto_now_add=True)
class Meta(object):
verbose_name = '博客评论'
verbose_name_plural = verbose_name
创建好模型后我们首先迁移数据库,不必多说:
python manage.py makemigrations # 创建数据库迁移文件
python manage.py migrate #迁移数据库
然后我们新建urls.py文件在总路由中include
编辑admin.py文件,使其可在后台编辑
from django.contrib import admin
from .models import Comment
# Register your models here.
@admin.register(Comment)
class ActicleTypeAdmin(admin.ModelAdmin):
list_display = ('id','name','email','url','to_user','comment','reply_time')
再然后就是新建视图函数了
def comment_submit(request):
post_id = request.POST.get('post_id') #获取文章id
is_exist = Article.objects.get(id=post_id) #判断文章是否存在,若不存在则直接return
if not is_exist:
return JsonResponse({'code': -1, 'msg': '无此文章'})
name = request.POST.get('name')
email = request.POST.get('email')
comment = request.POST.get('comment')
url = request.POST.get('url')
try:#尝试在数据库中插入数据,若失败 return
Comment.objects.create(comment=comment, name=name, email=email, url=url,post=is_exist)
except:
return JsonResponse({'code': -1, 'msg': '评论失败'})
else:
time = datetime.now().timetuple()#这两行是为了去掉datetime中的前导0
reply_time = str(time.tm_year) + '年' + str(time.tm_mon) + '月' + str(time.tm_mday) + '日 ' + (
time.tm_hour != 0 and (str(time.tm_hour)) or ((''))) +':'+ str(time.tm_min)
comments = [{# 创建comment在模板中遍历
'name': name,
'comment': comment,
'url': url,
'reply_time':reply_time
}]
html = loader.render_to_string('comments.html', {'comments': comments})#渲染评论模板
# 将渲染完成的模板返还给前端 因为前端html拼接太麻烦,所以索性后台渲染了
return JsonResponse({'code': 0, 'data': html})
前端拿到数据后只需要在将res中的data给赋给评论div即可,比如:
$.post({
...
success: function(res) {
//将评论模板在id为comments_list之前渲染出来,用append去了末尾,评论多的话用户以为没有评论
$("#comments_list").before(res.data);
},
error: function() {
alert('评论失败')
}
})
如此这般,大功告成,只需优化逻辑,美化界面即可
至于怎么回复用户的评论,我们下次再见
最后修改于2020年3月18日 22:19
©允许规范转载
Django Python版权声明:如无特殊说明,文章均为本站原创,转载请注明出处
本文链接:https://www.yangyingqi.com/13.html