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,一般命名规则为"对象类型:对象ID:对象属性"
total_views = r.incr('article:{}:views'.format(article.id))
# zincrby(name, amount, value)方法:根据amount设定的步长增加有序集合name中的value的分值(类似于权重)
# 实现了每访问一次文章就会将article_ranking中的article.id分值增加1
# article_ranking中存放的是文章的id用来代表文章,每访问一次该文章就会增加文章的分值
r.zincrby('article_ranking', 1, article.id)
# 获取分值排名前十的对象
article_ranking = r.zrange('article_ranking', 0, -1, desc=True)[:10]
# 获取排名前十文章的id列表,使用的是列表推导式,先进行for循环,再将每次的的值带入int()方法运算,将结果放在新的列表中
article_ranking_ids = [int(id) for id in article_ranking]
print('文章浏览量对应的id:%s' % article_ranking_ids)
# 查询出排名在前十的文章对象,并放在list中。注意id__in用法:id在article_ranking_ids列表中
most_viewed = list(ArticlePost.objects.filter(id__in=article_ranking_ids))
print('文章未排序:%s' % most_viewed)
# 将获得的列表按照下表索引进行排序,lamda为匿名函数,先运算后面表达式,冒号前的x相当于参数,代表most_viewed列表中文章对象
# 按照文章的id得到对应的下标,再按照下标进行排序
most_viewed.sort(key=lambda x: article_ranking_ids.index(x.id))
print('文章已经排序:%s' % most_viewed)
return render(request, 'article/column/article_detail.html', {'article': article,
'total_views': total_views,
'most_viewed': most_viewed})

  2、前端页面


{% extends 'article/base.html' %}
{% load staticfiles %}
{% block title %}article detail{% endblock %} {% block content %}
<div class="container">
<div class="col-md-9">
<header>
<h1>{{ article.title }}</h1>
<p>{{ user.username }} {{ total_views }}次阅读</p>
</header> <link rel="stylesheet" href="{% static 'editor/css/editormd.preview.css' %}"> <div id="editormd-view">
<textarea id="append-test" style="display: none">
{{ article.body }}
</textarea>
</div>
</div>
<div class="col-md-3">
<p class="text-center">最受欢迎文章</p>
<ol>
{% for article_rank in most_viewed %}
<li>
<a href="{{ article_rank.get_url_path }}">{{ article_rank.title }}</a>
</li>
{% endfor %}
</ol>
</div> </div>
<script src="{% static 'js/jquery.js' %}"></script>
<script src="{% static 'editor/lib/marked.min.js' %}"></script>
<script src="{% static 'editor/lib/prettify.min.js' %}"></script>
<script src="{% static 'editor/lib/raphael.min.js' %}"></script>
<script src="{% static 'editor/lib/underscore.min.js' %}"></script>
<script src="{% static 'editor/lib/sequence-diagram.min.js' %}"></script>
<script src="{% static 'editor/lib/flowchart.min.js' %}"></script>
<script src="{% static 'editor/lib/jquery.flowchart.min.js' %}"></script>
<script src="{% static 'editor/editormd.js' %}"></script> <script type="text/javascript">
$(function () {
editormd.markdownToHTML("editormd-view",{
htmlDecode:"style,script,iframe",
emoji:true,
tasklist:true,
flowChart:true,
tex:true,
sequenceDiagram:true,
});
});
</script>
{% endblock %}
 

使用redis实现【统计文章阅读量】及【最热文章】功能的更多相关文章

  1. WordPress文章阅读量统计和显示(非插件, 刷新页面不累加)

    本文已同步到专业技术网站 www.sufaith.com, 该网站专注于前后端开发技术与经验分享, 包含Web开发.Nodejs.Python.Linux.IT资讯等板块. WordPress文章阅读 ...

  2. 转:关于Python中的lambda,这篇阅读量10万+的文章可能是你见过的最完整的讲解

    lambda是Python编程语言中使用频率较高的一个关键字.那么,什么是lambda?它有哪些用法?网上的文章汗牛充栋,可是把这个讲透的文章却不多.这里,我们通过阅读各方资料,总结了关于Python ...

  3. 开发 Django 博客文章阅读量统计功能

    作者:HelloGitHub-追梦人物 文中所涉及的示例代码,已同步更新到 HelloGitHub-Team 仓库 如何精确地记录一篇文章的阅读量是一个比较复杂的问题,不过对于我们的博客来说,没有必要 ...

  4. 添加 hexo yilia 主题的文章阅读量

    根据此篇博客(点击查看) 配置出自己的博客阅读量,里面介绍了如何配置开通 leancloud 应用 当然介绍我如何配置 yilia 显示自己的浏览量的. 首先在 yilia 主题下修改 _config ...

  5. 关于写作那些事之利用 js 统计各大博客阅读量

    在日常文章数据统计的过程中,纯手动方式已经难以应付,于是乎,逐步开始了程序介入方式进行统计. 在上一节中,探索利用 csv 文件格式进行文章数据统计,本来以为能够应付一阵子,没想到仅仅一天我就放弃了. ...

  6. 利用Github Pages创建的Jekyll模板个人博客添加阅读量统计功能

    目录 前言 准备工作 模板文件修改 写在最后 内容转载自我自己的博客 @(文章目录) 前言 Jekyll 是一个简单的免费的 Blog 生成工具,类似 WordPress .它只是一个生成静态网页的工 ...

  7. phpcms V9首页 频道页 列表页 推荐位 简单获取文章浏览量和评论统计

    phpcms V9首页 频道页 列表页 推荐位 简单获取文章浏览量和评论统计 列表取得数据方法: {pc:content action="lists" catid="$c ...

  8. Hexo Next配置百度分享、加入动态背景、接入网页在线联系功能、页脚增加统计功能、添加gitment、添加热度、阅读量排行

    Hexo Next配置百度分享.加入动态背景.接入网页在线联系功能.页脚增加统计功能.添加gitment.添加热度.阅读量排行: https://wangc1993.github.io/categor ...

  9. C#爬虫使用代理刷csdn文章浏览量

    昨天写了一篇关于“c#批量抓取免费代理并验证有效性”的文章,接着昨天的目标继续完成吧,最终实现的目的就是刷新csdn文章的浏览量(实际上很简单,之前博客园的文章也是可以使用代理ip来刷的,后来不行了) ...

随机推荐

  1. webservice jaxws header验证

    @WebService @HandlerChain public class UserService { ... } package com.xx.ws.header; import org.w3c. ...

  2. android笔记:Service

    服务:在后台运行,没有界面的组件. 服务生命周期如下: 两种启动方式: 1.startService(): onCreate()-->onStartCommand()-->onDestro ...

  3. 神经网络出现nan原因?以及解决

    之前在TensorFlow中实现不同的神经网络,作为新手,发现经常会出现计算的loss中,出现Nan值的情况,总的来说,TensorFlow中出现Nan值的情况有两种,一种是在loss中计算后得到了N ...

  4. django做form表单的数据验证

    我们之前写的代码都没有对前端input框输入的数据做验证,我们今天来看下,如果做form表单的数据的验证 在views文件做验证 首先用文字描述一下流程 1.在views文件中导入forms模块 2. ...

  5. mybatis框架的架构(图解)

    1. mybatis配置 SqlMapConfig.xml,此文件作为mybatis的全局配置文件,配置了mybatis的运行环境等信息. mapper.xml文件即sql映射文件,文件中配置了操作数 ...

  6. 【SQL模板】四.插入/更新 列模板TSQL

    ---Name: 插入/更新 列模板.sql ---Purpose: 用于更新 数据库中 列 的脚本模板 ---Author: xx ---Time: 2015-12-18 10:26:06 ---R ...

  7. vue-cli启动本地服务,局域网下通过ip访问不到的原因

    1.问题描述: 新开发了一个vue-cli项目,想通过手机查看效果,发现访问不到,ip地址和端口号都没错但是手机访问不到,在本机电脑浏览器输入ip端口号一样访问不到,只能通过localhost:808 ...

  8. 使用第三方容器服务,自动化部署.Net Core

    1.为什么用第三方,而不自建,有哪些第三方,最后实现的效果 a.尝试过自建,并成功了,但是很麻烦,要敲一堆命令,无法达到全自动化部署的要求. b.自建,就算用第三方的镜像包,感觉下载还是不快,不知道为 ...

  9. Linux 模块管理

    查看模块信息 modinfo module-name 加载模块 insmod module-name 卸载模块 rmmod module-name 生成模块依赖 cd /lib/module/`una ...

  10. 神奇的照片修复术,这才是 PS 的正确打开方式!

    蒲公英种子从远处飘回 聚成伞的模样 太阳从西边升起 落向东方 运动员回到起跑线上 轰鸣的火车退回家乡 雪花纷飞 飘向天际 我沉入梦乡 你还在我身旁 ——公益广告 大概只有时光倒流,我们才能回到那些每天 ...