网站后台怎么不能上传图片,360免费建站官方,创建全国文明城市宣传栏,wordpress多导航文章目录0.models中增加新字段1.models中增加方法2.迁移数据库3.修改视图函数4.在模板中显示阅读量0.models中增加新字段
为了记录文章的浏览量#xff0c;需要在文章的数据库表中新增一个用于存储阅读量的字段。
文件位置#xff1a;blog/models.py
class Post(models.Mo…
文章目录0.models中增加新字段1.models中增加方法2.迁移数据库3.修改视图函数4.在模板中显示阅读量0.models中增加新字段
为了记录文章的浏览量需要在文章的数据库表中新增一个用于存储阅读量的字段。
文件位置blog/models.py
class Post(models.Model):# ... 其它已有字段# 新增 views 字段记录阅读量views models.PositiveIntegerField(default0, editableFalse)注意
1views 字段的类型为 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(default0)# ... 其它已有的模型方法def increase_views(self):self.views 1self.save(update_fields[views])注意
1increase_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, pkpk)# 阅读量 1post.increase_views()md markdown.Markdown(extensions[markdown.extensions.extra,markdown.extensions.codehilite,# 记得在顶部引入 TocExtension 和 slugifyTocExtension(slugifyslugify),])post.body md.convert(post.body)m re.search(rdiv classtoc\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 classentry-meta...span classviews-counta href{{ post.get_absolute_url }}{{ post.views }} 阅读/a/span
/div文件位置templates/blog/detail.html
div classentry-meta...span classviews-counta href#{{ post.views }} 阅读/a/span
/div至此当用户每访问一次文章详情views 记录的数值就会 1从而达到粗略统计阅读量的目的。