Diango博客--12.开发 Django 博客文章阅读量统计功能

文章目录

    • 0.models中增加新字段
    • 1.models中增加方法
    • 2.迁移数据库
    • 3.修改视图函数
    • 4.在模板中显示阅读量

0.models中增加新字段

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

文件位置:blog/models.py

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

注意:

1)views 字段的类型为 PositiveIntegerField,该类型的值只允许为正整数或 0,因为阅读量不可能为负值。

2)初始化时 views 的值为 0。

3)将 editable 参数设为 False 将不允许通过 django admin 后台编辑此字段的内容。因为阅读量应该根据被访问次数统计,而不应该人为修改。

1.models中增加方法

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

文件位置:blog/models.py

class Post(models.Model):# ... 其它已有字段# 新增 views 字段记录阅读量views = models.PositiveIntegerField(default=0)# ... 其它已有的模型方法def increase_views(self):self.views += 1self.save(update_fields=['views'])

注意:

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

2)然后调用 save 方法将更改后的值保存到数据库。

3)注意这里使用了 update_fields 参数来告诉 Django 只更新数据库中 views 字段的值,以提高效率。

2.迁移数据库

一旦更改了模型,就需要迁移数据库,以便让 Django 将更改反应到数据库中。在项目根目录运行如下两条命令:

$ pipenv run python manage.py makemigrations
$ pipenv run python manage.py migrate

3.修改视图函数

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

一旦该视图函数被调用,说明文章被访问了一次,因此我们修改 detail 视图函数,让被访问的文章在视图函数被调用时阅读量 +1

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

文件位置:blog/views.py

def detail(request, pk):post = get_object_or_404(Post, pk=pk)# 阅读量 +1post.increase_views()md = markdown.Markdown(extensions=['markdown.extensions.extra','markdown.extensions.codehilite',# 记得在顶部引入 TocExtension 和 slugifyTocExtension(slugify=slugify),])post.body = md.convert(post.body)m = re.search(r'<div class="toc">\s*<ul>(.*)</ul>\s*</div>', md.toc, re.S)post.toc = m.group(1) if m is not None else ''return render(request, 'blog/detail.html', context={'post': post})

4.在模板中显示阅读量

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

这里我们分别修改两个地方,分别是 index.html 和 detail.html。

文件位置:templates/blog/index.html

<div class="entry-meta">...<span class="views-count"><a href="{{ post.get_absolute_url }}">{{ post.views }} 阅读</a></span>
</div>

文件位置:templates/blog/detail.html

<div class="entry-meta">...<span class="views-count"><a href="#">{{ post.views }} 阅读</a></span>
</div>

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/452416.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c++ try_catch throw

使用throw抛出异常 本人节选自《21天学通C》一书 抛出异常&#xff08;也称为抛弃异常&#xff09;即检测是否产生异常&#xff0c;在C中&#xff0c;其采用throw语句来实现&#xff0c;如果检测到产生异常&#xff0c;则抛出异常。该语句的格式为&#xff1a; throw 表达式…

数字证书和数字签名

什么是数字证书&#xff1f;由于Internet网电子商务系统技术使在网上购物的顾客能够极其方便轻松地获得商家和企业的信息,但同时也增加了对某些敏感或有价值的数据被滥用的风险. 为了保证互联网上电子交易及支付的安全性,保密性等&#xff0c;防范交易及支付过程中的欺诈行为&a…

域名劫持

转载于:https://www.cnblogs.com/xinghen1216/p/8548323.html

cesium html源码,Cesium源码的本地运行及调试

CesiumJS源码运行有两种方式&#xff1a;基于node.js运行官方下载地址&#xff1a;https://cesium.com/cesiumjs/下载解压后&#xff0c;在根目录安装依赖后&#xff0c;就可直接运行npm initnpm start如果调试代码呢&#xff0c;官方的示例都是在Sandcastle里放着&#xff0c;…

Diango博客--13.将“视图函数”类转化为“类视图”

文章目录0.思路引导1.ListView2.将 index 视图函数改写为类视图3.将 category 视图函数改写为类视图4.将 archive 视图函数改写成类视图5.将 tag 视图函数改写成类视图6.DetailView7.将DetailView视图函数改写成类视图0.思路引导 1&#xff09;在开发网站的过程中&#xff0c;…

es6之数据结构 set,WeakSet,mapWeakMap

{let list new Set();list.add(1);list.add(2);list.add(1);console.log(list); //Set(2) {1, 2} let arr[1,2,3,1,2] let list2new Set(arr); console.log(list2); //Set(3) {1, 2, 3} } Set ES6 提供了新的数据结构 Set。它类似于数组&#xff0c;但是成员的值都是唯一的&a…

关于C语言中继承和多态的实现

以下的内容综合了多篇文章&#xff0c;加上一点自己的理解而成。目的为了给自己阅读他们文章后做一个笔记。在末尾给出了这些文章的地址。 多态的实现可以采用以下几种方式&#xff1a; (1)使用 vod * (万能指针)来实现“编译时多态”。 (2)使用函数指针来实现“运行时…

边界测试

边界条件边界测试是单元测试中最后的也可能是最重要的任务。 软件常常在它的边界上失效&#xff0c;例如&#xff0c;处理n元数组的第n个元素时&#xff0c;或做到i次循环中的第i次重复时&#xff0c;往往会发生错误。 使用刚好小于、刚好等于和刚好大于最大值或最小值的数据结…

阿里云上Kubernetes集群联邦

摘要&#xff1a; kubernetes集群让您能够方便的部署管理运维容器化的应用。但是实际情况中经常遇到的一些问题&#xff0c;就是单个集群通常无法跨单个云厂商的多个Region&#xff0c;更不用说支持跨跨域不同的云厂商。这样会给企业带来一些担忧&#xff0c;如何应对可用区级别…

缺氧游戏计算机,缺氧PC最低什么配置一览 你觉得高吗

缺氧PC最低什么配置一览&#xff0c;你觉得高吗。游戏对于电脑有不同程度的要求&#xff0c;缺氧这款游戏也有着自己的配置要求&#xff0c;看看下面的缺氧PC最低什么配置一览&#xff0c;你的硬件够得上吗。缺氧最低配置&#xff1a;首先公布的是官 方配置需求&#xff0c;目前…

Diango博客--14.使用 Django 项目中的 ORM 编写伪造测试数据脚本

文章目录0.思路引导1.脚本目录结构2.使用 Faker 快速生成测试数据3.批量生成测试数据4.执行脚本5.效果展示0.思路引导 1&#xff09;为了防止博客首页展示的文章过多以及提升加载速度&#xff0c;可以对文章列表进行分页展示。 2&#xff09;不过这需要比较多的文章才能达到分…

基于Sql Server 2008的分布式数据库的实践

配置Sql Server 2008&#xff08;Win7&#xff09; 1.打开SQL server2012&#xff0c;使用windows身份登录 2.登录后&#xff0c;右键选择“属性”。左侧选择“安全性”&#xff0c;选中右侧的“SQL Server 和 Windows 身份验证模式”以启用混合登录模式 3.选择“连接”&#x…

横向技术分析C#、C++和Java优劣

本文将从技术人员的角度横向分析C#、C和Java优劣&#xff0c;其实选择Java阵营还是.NET阵营&#xff0c;大家可以根据自己的实际需要来确定。 C#诞生之日起&#xff0c;关于C#与Java之间的论战便此起彼伏&#xff0c;至今不辍。抛却Microsoft与Sun之间的恩怨与口角&#xff0c;…

软件测试中的存根程序

存根程序用来代替被测试的模块所调用的模块&#xff0c;因此存根程序也称为“虚拟子程序”&#xff0c;它利用被它代替的模块的接口&#xff0c;只做尽可能少的数据操作。

计算机网络应用云计算,计算机网络云计算的类型

原标题&#xff1a;计算机网络云计算的类型随着现代计算机网络技术的不断发展&#xff0c;越来越多的与计算机网络有关的现代化技术得以出现&#xff0c;并且有着广泛的应用&#xff0c;其中云计算技术就是比较常见的一种&#xff0c;在实际应用中发挥着较高的价值。在信息时代…

sublime_text快捷键

1、注释&#xff1a;选中文本后&#xff0c;CTRL / 2、CTRL N,CTRLS&#xff0c;保存成.html文件后&#xff0c;只需要输入感叹号&#xff01;&#xff0c;然后tab键&#xff0c;即可打印出基本的html格式&#xff01;转载于:https://www.cnblogs.com/JAVA-STUDYER/p/855040…

Diango博客--15.通过 Django Pagination 实现简单分页(一)

文章目录0.思路引导1.Paginator 类的常用方法2.用 Paginator 给文章列表分页3.在模板中设置分页导航4.效果展示0.思路引导 1&#xff09;当博客上发布的文章越来越多时&#xff0c;通常需要进行分页显示&#xff0c;以免所有的文章都堆积在一个页面&#xff0c;影响用户体验。…

SpringMVC 测试 mockMVC

SpringMVC测试框架 基于RESTful风格的SpringMVC的测试&#xff0c;我们可以测试完整的Spring MVC流程&#xff0c;即从URL请求到控制器处理&#xff0c;再到视图渲染都可以测试。 一 MockMvcBuilder MockMvcBuilder是用来构造MockMvc的构造器&#xff0c;其主要有两个实现&…

自顶向下和自底向上测试的优缺点

自顶向下测试方法的主要优点是不需要测试驱动程序&#xff0c;能够在测试阶段的早期实现并验证系统的主要功能&#xff0c;而且能在早期发现上层模块的接口错误。 自顶向下测试方法的主要缺点是需要存根程序&#xff0c;可能遇到与此相联系的测试困难&#xff0c;低层关键模块中…

C++ class中的静态(static)成员

C class中的静态(static)成员 &#xff08;1&#xff09; 静态数据成员 ①一般地静态数据成员在该类定义之外被初始化&#xff0c;如同一个成员函数被定义在类定义之外一样。在这种定义中的静态成员的名字必须被其类名限定修饰&#xff0c;例如下面是_interestRate的初始…