Django 统计文章阅读量(或热度排名)

添加新字段

为了记录文章的访问量,需要在文章的数据库表中新增一个用于存储阅读量的字段。

1 /models.py
2
3 class Post(models.Model):
4     #其它已有字段
5     #新添views字段记录阅读量
6     views = models.PositiveInterField(default=0)

注意 views 字段的类型为 PositiveInterField,该类型的值只允许为正整数或0,因为阅读量不可能

为负数。初始化时views的值为0。

添加模型方法

一旦用户访问了某篇文章,只是就应该将views的值 +1,这个过程最好有post模型

自己来完成,因此再给模型添加一个自定义的方法:

 1 /models.py
 2
 3 class Post(models.Model):
 4     # ... 其它已有字段
 5     # 新增 views 字段记录阅读量
 6     views = models.PositiveIntegerField(default=0)
 7
 8     # ... 其它已有的模型方法
 9     def increase_views(self):
10         self.views += 1
11         self.save(update_fields=[‘views‘])

increase_views 方法首先将自身对应的 views 字段的值 +1(此时数据库中的值还没变),

然后调用 save 方法将更改后的值保存到数据库。注意这里使用了 update_fields 参数

来告诉 Django 只更新数据库中 views 字段的值,以提高效率。

你也许担心如果两个人同时访问一篇文章,更改数据库中的阅读量字段的值时会不会冲突?

其实不必担心,我们本来就不是精确地统计阅读量,而且个人博客的流量通常也不会很大,

所以偶尔的冲突导致的数据误差是可以忽略不计的。

修改视图函数

当用户请求访问某篇文章时,处理该请求的视图函数为 detail 。一旦该视图函数被调用,

说明文章被访问了一次,因此我们修改 detail 视图函数,让被访问的文章在视图函数被

调用时阅读量 +1。

 1 blog/views.py
 2
 3 def detail(request, pk):
 4     post = get_object_or_404(Post, pk=pk)
 5
 6     # 阅读量 +1
 7     post.increase_views()
 8
 9     post.body = markdown.markdown(post.body,
10                                   extensions=[
11                                       ‘markdown.extensions.extra‘,
12                                       ‘markdown.extensions.codehilite‘,
13                                       ‘markdown.extensions.toc‘,
14                                   ])
15     form = CommentForm()
16     comment_list = post.comment_set.all()
17     context = {‘post‘: post,
18                ‘form‘: form,
19                ‘comment_list‘: comment_list
20                }
21     return render(request, ‘blog/detail.html‘, context=context)

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

设置热门文章排名如下

 1 def articlecont(request):
 2     #文档内容
 3     #获取显示的文章id
 4     nid = request.GET.get(‘nid‘)
 5     #获取文章
 6     articledata = models.article.objects.filter(id=nid).first()
 7     #获取到的文章调用incease_views方法
 8     models.article.increase_views(articledata)
 9     #根据自增的views字段进行排序,并获取最高的5条数据
10     hotdoc = models.article.objects.order_by("-views")[0:5]
11     return render(request, "articlecont.html", {"articledata": articledata,‘hotdoc‘:hotdoc})

模板中的操作

在模板中显示阅读量和显示其它字段一样,只需要使用模板变量即可。即模板适当的地方使用 {{ post.views }} 模板变量。这里我们分别修改两个地方,分别是 index.html 和 detail.html。

1 templates/blog/detail.html
2
3 <div class="entry-meta">
4   ...
5   <span class="views-count"><a href="#">{{ post.views }} 阅读</a></span>
6 </div>

好了,这样当用户每访问一次文章详情,views 记录的数值就会 +1,从而达到粗略统计阅读量的目的

原文地址:https://www.cnblogs.com/daidechong/p/10025743.html

时间: 2024-11-02 14:35:02

Django 统计文章阅读量(或热度排名)的相关文章

使用redis实现【统计文章阅读量】及【最热文章】功能

1.视图函数 # 不需要登录装饰器,匿名用户也可访问def article_detail(request, id, slug): # print(slug,id) article = get_object_or_404(ArticlePost, id=id, slug=slug) # 连接redis r = redis.StrictRedis(host=settings.REDIS_HOST, port=settings.REDIS_PORT, db=settings.REDIS_DB) # 总

今日头条运营秘诀分享:让你的文章阅读量和收入都“飞”起来

1. 互联网发展纯熟,我们进入了自媒体时代.人们借助自媒体平台可以分享内容,这种分享有私人化.平民化.普泛化.自主化的特点.而这也让我们迎来了内容创业这个大机遇. 对于内容创作者来说,在这个时代,无疑是幸福的.因为创作内容不再只是兴趣爱好,陶冶情操,也可以利用这个兴趣来赚钱,获得美好的酬劳. 现在内容平台有很多,有的可以通过发布内容来获取收入,有的则能够获得机会.不同的平台有不同的风格和规则,顺应这些规则来运营才能够有好的效果. 今天,time给大家分享一下关于今日头条的运营方法和秘诀,让你的文

自媒体怎么提升收益,如何提升自媒体文章阅读量?

现在自媒体文章出现一个很明显的数据趋势,那就是普通自媒体人的文章阅读量越来越少,那些大咖们的文章阅读量越来越多,现在还有很多自媒体人可能连推荐量都没有. 样的情况是现在很常见的,那我们应该怎样维护个人利益改变这种趋势呢?首先,我们要明白一个问题,那就是在名气方面我们自然是不能和大咖.明星想比,我们只能是做好内容质量,抓住平台的运营规则去做内容,这样才能够更好地提升阅读量! 1.文章内容符合标题 文章内容也是要符合标题的,为什么说会有标题党的出现,很大原因就是因为他们标题很吸引人,但是文章质量完全

28.为什么技术文章阅读量只几千,鸡汤文却轻松过万

前段时间,timyang(新浪微薄技术总监)在群里发问:"我的疑惑是所有比较受欢迎的技术文章,阅读数为什么停在几千:朋友圈看到也不点,由于阅读数上不去,大家都要拼标题". 这是个很有意思的话题,我们可以借此为契机,看一下在pc互联网和微信中: 1.      信息传播的变化 2.      各自属性 1.    信息传播的变化 在传统的互联网中,获取信息的主要渠道是什么? 是搜索!!!造就了百度的搜索. 搜索有什么特点? 1.      具有主动性.当我搜索的时候,是对某个技术感到兴趣

wordpress文章统计插件:WP-PostViews让你的文章阅读量及时更新

新安装的wordpress博客,打开文章是不刷新文章的阅读数量的,但是我们可以借助WP-PostViews插件,来及时更新我们的文章统计数量.接下来泽业建站网就给新手们一个完整的新手教程,教大家使用这个插件. 第一步:安装和启用插件. 方法:后台首页--插件--安装插件--搜索WP-PostViews,选择第一个由Lester 'GaMerZ' Chan开发的WP-PostViews插件,点击现在安装,安装以后,再点击启用即可.启用以后如图: 安装WP-PostViews插件 第二步:添加代码.

杨泽业:WP-PostViews文章统计插接让你的文章阅读量及时更新

新安装的wordpress博客,打开文章是不刷新文章的阅读数量的,但是我们可以借助WP-PostViews插件,来及时更新我们的文章统计数量.接下来泽业建站网就给新手们一个完整的新手教程,教大家使用这个插件. 第一步:安装和启用插件. 方法:后台首页--插件--安装插件--搜索WP-PostViews,选择第一个由Lester 'GaMerZ' Chan开发的WP-PostViews插件,点击现在安装,安装以后,再点击启用即可.启用以后如图: 安装WP-PostViews插件 第二步:添加代码.

Web Worker——js的多线程,实现统计博客园总阅读量

前言 众所周知,js是单线程的,从上往下,从左往右依次执行,当我们有耗时的任务需要处理时,便会阻塞线程造成页面卡顿等问题.web worker的目的,就是为JavaScript创造多线程环境,允许主线程将一些任务分配给子线程.在主线程运行的同时,子线程在后台运行,两者互不干扰.等到子线程完成计算任务,再把结果返回给主线程.因此,每一个子线程就好像一个“工人”(worker),默默地完成自己的工作.更多worker的介绍请戳:JavaScript标准参考教程 本文通过web worker 统计博客

微信公众号互阅平台-真实提高阅读量-「作者加鸡腿」

环境:微信个人订阅号 建了个互阅的平台,平台用户100+人,纯人工真实阅读,迅速阅读100+. 希望有想提高文章阅读量的小伙伴扫一下下方二维码,备注「加鸡腿」拉你. 原文地址:https://www.cnblogs.com/niceyoo/p/12156058.html

为Typecho增加文章阅读次数统计功能

文章次数统计是比较常用的功能,插件一搜一堆,下面说说把这个功能集成到主题里的方法:把下面这段代码放到主题文件functions.php中 function Postviews($archive) { $db = Typecho_Db::get(); $cid = $archive->cid; if (!array_key_exists('views', $db->fetchRow($db->select()->from('table.contents')))) { $db->