使用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,一般命名规则为"对象类型:对象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实现【统计文章阅读量】及【最热文章】功能的更多相关文章
- WordPress文章阅读量统计和显示(非插件, 刷新页面不累加)
本文已同步到专业技术网站 www.sufaith.com, 该网站专注于前后端开发技术与经验分享, 包含Web开发.Nodejs.Python.Linux.IT资讯等板块. WordPress文章阅读 ...
- 转:关于Python中的lambda,这篇阅读量10万+的文章可能是你见过的最完整的讲解
lambda是Python编程语言中使用频率较高的一个关键字.那么,什么是lambda?它有哪些用法?网上的文章汗牛充栋,可是把这个讲透的文章却不多.这里,我们通过阅读各方资料,总结了关于Python ...
- 开发 Django 博客文章阅读量统计功能
作者:HelloGitHub-追梦人物 文中所涉及的示例代码,已同步更新到 HelloGitHub-Team 仓库 如何精确地记录一篇文章的阅读量是一个比较复杂的问题,不过对于我们的博客来说,没有必要 ...
- 添加 hexo yilia 主题的文章阅读量
根据此篇博客(点击查看) 配置出自己的博客阅读量,里面介绍了如何配置开通 leancloud 应用 当然介绍我如何配置 yilia 显示自己的浏览量的. 首先在 yilia 主题下修改 _config ...
- 关于写作那些事之利用 js 统计各大博客阅读量
在日常文章数据统计的过程中,纯手动方式已经难以应付,于是乎,逐步开始了程序介入方式进行统计. 在上一节中,探索利用 csv 文件格式进行文章数据统计,本来以为能够应付一阵子,没想到仅仅一天我就放弃了. ...
- 利用Github Pages创建的Jekyll模板个人博客添加阅读量统计功能
目录 前言 准备工作 模板文件修改 写在最后 内容转载自我自己的博客 @(文章目录) 前言 Jekyll 是一个简单的免费的 Blog 生成工具,类似 WordPress .它只是一个生成静态网页的工 ...
- phpcms V9首页 频道页 列表页 推荐位 简单获取文章浏览量和评论统计
phpcms V9首页 频道页 列表页 推荐位 简单获取文章浏览量和评论统计 列表取得数据方法: {pc:content action="lists" catid="$c ...
- Hexo Next配置百度分享、加入动态背景、接入网页在线联系功能、页脚增加统计功能、添加gitment、添加热度、阅读量排行
Hexo Next配置百度分享.加入动态背景.接入网页在线联系功能.页脚增加统计功能.添加gitment.添加热度.阅读量排行: https://wangc1993.github.io/categor ...
- C#爬虫使用代理刷csdn文章浏览量
昨天写了一篇关于“c#批量抓取免费代理并验证有效性”的文章,接着昨天的目标继续完成吧,最终实现的目的就是刷新csdn文章的浏览量(实际上很简单,之前博客园的文章也是可以使用代理ip来刷的,后来不行了) ...
随机推荐
- Ajax的get方式传值 避免& 与= 号
js代码 例如: var name = $("#name”).value;//为a&b=7 name=encodeURLComponent(name); 可以将a&b=7转化 ...
- SpringMVC中在web.xml中添加中文过滤器的写法
<filter> <filter-name>characterEncodingFilter</filter-name> <filter-class>or ...
- java实现24点游戏代码
import java.util.Arrays;import java.util.Scanner; public class Test07 { public static void main(S ...
- 【英宝通Unity4.0公开课学习 】(一)资源管理
经过多次面试后发现自己对Unity3D的框架缺乏一个整体的认识. 而前面由于离职等原因总是忙于修修补补,疲于奔命,感觉相当疲惫. 还好,后来经过调整,开始淡定了起来.得特别感谢一本书哇:<高效人 ...
- hibernate编写流程
1.加载hibernatexml配置文件 2.创建sessionFactory 3.根据sessionFactory创建session 4.开启事务 5.持久化操作 6.提交事务 7.释放资源 其中第 ...
- Linux readelf命令
一.简介 readelf用来显示一个或者多个elf格式的目标文件的信息,可以通过它的选项来控制显示哪些信息.这里的elf-file(s)就表示那些被检查的文件.可以支持32位,64位的elf格式文件, ...
- 欲哭无泪的p-value = 0.051 | 做几次重复能得到较低的p-value
欲哭无泪的p-value = 0.051 | 做几次重复能得到较低的p-value 已有 1469 次阅读 2017-12-15 14:12 |个人分类:RNA-seq|系统分类:科普集锦|关键词:R ...
- win7安装qt5 纯记录 水文
去qt官网下载http://www.qt.io/看见download就点进去看看吧 目前的下载地址路径是http://www.qt.io/download-open-source选择Offline I ...
- div浮停在页面最上或最下
div{ position:fixed; bottom:0px; // top:0px; z-index:999; } bottom:0px 浮停在最下面,top:0px 浮停在最上面:z-index ...
- pyspider示例代码四:搜索引擎爬取
搜索引擎爬取 #!/usr/bin/env python # -*- encoding: utf- -*- # Created on -- :: # Project: __git_lab_fix fr ...