在我们前两遍文章里,我们已经创建一个比较完善的Article模型,利用Django的通用视图开发了博客的管理后台,实现了文章的增删查改。我们还配置了CKEditor实现博客文章的富文本编辑(包括上传图片和显示代码)。在本文中我们将对该博客做进一步改进,利用AJAX技术实现仿微信评论的点赞功能。当登录用户点击大拇指按钮时,文章总点赞次数在页面无需刷新的情况下自动加1,当用户再次点击大拇指时,取消点赞,总点赞次数自动减1。非登录用户在点击大拇指按钮时,会被要求先登录。本文参考了部分Django By Example的内容。
如果你还没有阅读过本专题,请务必先阅读之前两篇文章:
实现思路
我们在Article模型里增加一个users_like的字段,记录点赞的用户,其与User是多对多的关系(如下所示)。有了这个字段,我们可以使用article.users_like.all查询点赞某篇文章的所有用户,还可以使用article.users_like.count来统计某篇文章的总点赞数。通过使用user.articles_liked.all可以查询某个用户所喜欢的所有文章条目。
# models.py
class Article(models.Model):
"""文章模型"""
slug = models.SlugField('slug', max_length=60, blank=True)
body = RichTextUploadingField('正文')
pub_date = models.DateTimeField('发布时间', null=True)
.....
users_like = models.ManyToManyField(User,
related_name='articles_liked', blank=True)