django统计文章阅读量(或热度排名)(代码片段)

daidechong daidechong     2023-01-26     644

关键词:

添加新字段

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

 

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,从而达到粗略统计阅读量的目的

 

阅读量(代码片段)

如何精确地记录一篇文章的阅读量是一个比较复杂的问题,不过对于我们的博客来说,没有必要记录的那么精确。因此我们使用一种简单但有效的方式来记录博客文章的阅读量:文章每被浏览一次,则其阅读量+... 查看详情

为typecho增加文章阅读次数统计功能(代码片段)

文章次数统计是比较常用的功能,下面通过修改代码实现统计。控制台/外观/编辑当前外观/在functions.php加入以下代码代码已中加入了cookie验证,让文章浏览次数更具有真实性阅读次数记录在db._contents.views表中。functionPostviews($archiv... 查看详情

githubpages+hexo搭建个人博客网站,史上最全教程(代码片段)

...tab页名称2.博客标题3.主页正中间的文字七、添加阅读量统计1.申请LeanCloud账号并创建应用2.修改Fluid配置单篇文章阅读量计数页面底部展示网站的PV、UV统计数八、添加评论功能九、发布到GitHu 查看详情

c#黔驴技巧之实现统计结果排名(代码片段)

前言本节是实现统计排名的一点技巧,可能有一部分童鞋在实现排名统计绕了一大圈,最后还不如两行代码就搞定,代码清晰而可读性强,接下来我们来一起来看看。统计排名我们知道在SQLServer中可以利用Row_Number、Rank等函数进... 查看详情

基于hive的youtube电影数据分析(代码片段)

...aidu.com/s/10P1Bmjx-y17R8jmy4q685g提取码:79a0一、项目需求1.统计视频观看数Top102.统计视频类别热度Top103.统计出视频观看数最高的20个视频的所属类别以及类别包含这Top20视频的个数4.统计视频观看数Top50所关联视频的所属类别的热... 查看详情

hive实战练习(包含数据集)(代码片段)

文章目录1.0数据说明2.0建表3.0实战练习3.1统计视频观看数Top103.2统计视频类别热度Top103.3统计出视频观看数最高的20个视频的所属类别以及类别包含Top20视频的个数3.4统计每个类别中的视频热度Top10,以Music为例3.5统计每个类别... 查看详情

使用spark进行搜狗日志分析实例——统计每个小时的搜索量(代码片段)

...g.apache.spark.rdd.RDD4importorg.apache.spark.SparkConf,SparkContext56/**7*统计每小时搜索次数8*/9/*10搜狗日志示例11访问时间(时:分:秒)用户ID[查询词]该URL在返回结果中的排名用户点击的顺序号用户点击的URL1200:00:0029821990737744 查看详情

统计各个分类和标签下的文章数(代码片段)

...签下有多少篇文章,该怎么做呢?最优雅的方式就是使用django的annotate方法。Model回顾回顾一下我们的model代码,django博客有一个Post和Category模型, 查看详情

20.multi_协程方法抓取总阅读量(代码片段)

#用asyncio和aiohttp抓取博客的总阅读量(提示:先用接又找到每篇文章的链接)#https://www.jianshu.com/u/130f76596b02importreimportasyncioimportaiohttpimportrequestsimportsslfromlxmlimportetreefromasyncio.queuesimportQueuefromaiosocks 查看详情

typecho显示文章阅读次数统计(代码片段)

#控制台/外观/编辑当前外观/在 functions.php 最后面加入以下代码 #代码已中加入了cookie验证,让文章浏览次数更具有真实性functionget_post_view($archive)$cid=$archive->cid;$db=Typecho_Db::get();$prefix=$db->getPrefix();if(!array_key_exists(... 查看详情

django简单吗?

django这个模块其实简单的,难点在于,开发一个web,需要集合前端(css、HTML、JavaScript)和后端(数据库)的知识点,如果你学习Django就是所谓的全端开发了,难度是有的,那些说不难的,都是从其他地方转过来的参考技术Adjango... 查看详情

基于spark和flink的电商数据分析项目(代码片段)

目录业务需求业务数据源用户访问Session分析Session聚合统计Session分层抽样Top10热门品类Top10活跃Session页面单跳转化率分析各区域热门商品统计分析广告点击流量实时统计分析总体流程实时黑名单广告点击实时统计统计每天各省top3... 查看详情

spark分析网站排名热度

需求:/解决是一个各个子模块内的热度排名--》排名得用sortBy---》(可能就是简单的排序,或者是二次排序)---》//前面有一个wordCount---》算出次数出来 --》考虑什么作为key//算的一个网站下面,每个子模块下面的网页热度前2... 查看详情

redis(代码片段)

...类的项目,经常会有一些前多少名的主播排名。还有一些文章阅读量的技术,或者新浪微博 查看详情

2020最新旅游景点展会美食节等推广文案域名防封系统

...大量转发,阅读量再高也不死,超稳。4、扫码量/阅读量统计系统多维度阅读量统计系统,详细统计扫码量和文章阅读量,实时掌握推广情况详细掌握用户阅读数。5、图片加速技术,文章秒开文章系统采用全系CDN加速,无视并发... 查看详情

mapreduce统计pv案例(代码片段)

理解网站基本指标几个工具编写mapreduce模板PV程序自定义计数器,对Mapreduce进行DEBUG调试一.网站基本指标1.1PVPV(pageview),即页面浏览量,或点击量;通常是衡量一个网络新闻频道或网站甚至一条网络新闻的主要指标。即:一个访问... 查看详情

综合练习:词频统计(代码片段)

...替换为空格将所有大写转换为小写生成单词列表生成词频统计排序排除语法型词汇,代词、冠词、连词输出词频最大TOP201.英文词频统下载一首英文的歌词或文章将所有,.?!’:等分隔符全部替换为空格将所有大写转换为小写生... 查看详情

hive从入门到实战五(代码片段)

 第10章Hive实战之谷粒影音10.1需求描述统计硅谷影音视频网站的常规指标,各种TopN指标:统计视频观看数Top10统计视频类别热度Top10统计出视频观看数最高的20个视频的所属视频类别以及对应视频类别的个数统计视频观看数Top5... 查看详情