前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Django 博客统计文章阅读量

Django 博客统计文章阅读量

作者头像
追梦人物
发布2018-04-17 14:40:31
1.2K0
发布2018-04-17 14:40:31
举报
文章被收录于专栏:Django中文社区Django中文社区

本文使用一种简单的方法来记录博客文章的阅读量。文章每被浏览一次,则其阅读量 +1,即所谓的文章页面 PV(Page View)数。

增加新字段

为了记录文章的浏览量,需要在文章的数据库表中新增一个用于存储阅读量的字段。因此修改博客文章的模型为:

代码语言:javascript
复制
blog/models.py

class Post(models.Model):
    # ... 其它已有字段
    # 新增 views 字段记录阅读量
    views = models.PositiveIntegerField(default=0)

注意 views 字段的类型为 PositiveIntegerField,该类型的值只允许为正整数或 0,毕竟阅读量不可能为负值。初始化时 views 的值为 0.

增加模型方法

一旦用户访问谋篇文章,这时就应该将 views 的值 +1,这个过程最好由 Post 模型自己来完成,因此再给模型添加一个自定义的方法:

代码语言:javascript
复制
blog/models.py

class Post(models.Model):
    # ... 其它已有字段
    # 新增 views 字段记录阅读量
    views = models.PositiveIntegerField(default=0)

    # ... 其它已有的模型方法
    def increase_views(self):
        self.views += 1
        self.save(update_fields=['views'])

increase_views 方法首先将自身对应的 views 字段的值 +1(此时数据库中的值还没变),然后调用 save 方法将更改后的值保存到数据库。注意这里使用了 update_fields 参数来告诉 Django 只更新数据库中 views 字段的值,以提高效率。

迁移数据库

一旦更改了模型,就需要迁移数据库,以便让 Django 将更改反应到数据库中。激活虚拟环境,运行如下两条命令:

代码语言:javascript
复制
python manage.py makemigrations
python manage.py migrate

关于数据库的迁移,具体请参照 让 Django 完成翻译——迁移数据库模型

修改视图函数

当用户请求访问某篇文章时,处理该请求的视图函数为 Detail 。一旦该视图函数被调用,说明文章被访问了一次,因此我们修改 Detail 视图函数,让被访问的文章在视图函数被调用时阅读量 +1。

代码语言:javascript
复制
blog/views.py

def detail(request, pk):
    post = get_object_or_404(Post, pk=pk)
    # 阅读量 +1
    post.increase_views()
    md = markdown.Markdown(extensions=[
        'markdown.extensions.extra',
        'markdown.extensions.codehilite',
        TocExtension(slugify=slugify)
    ])
    post.body = md.convert(post.body)
    form = CommentForm()
    comment_list = post.comment_set.all()
    context = {'post': post,
               'toc': md.toc,
               'form': form,
               'comment_list': comment_list
               }
    return render(request, 'blog/detail.html', context=context)

即只需在视图函数中调用模型的 increase_views 方法即可。

在模板中显示阅读量

在模板中显示阅读量和显示其它字段一样,只需要使用模板变量即可。即模板适当的地方使用 {{ post.views }} 模板变量。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 增加新字段
  • 增加模型方法
  • 迁移数据库
  • 修改视图函数
  • 在模板中显示阅读量
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档