1、视图函数

  1. # 不需要登录装饰器,匿名用户也可访问
    def article_detail(request, id, slug):
  2. # print(slug,id)
  3. article = get_object_or_404(ArticlePost, id=id, slug=slug)
  4. # 连接redis
  5. r = redis.StrictRedis(host=settings.REDIS_HOST, port=settings.REDIS_PORT, db=settings.REDIS_DB)
  6. # 总的访问次数,访问一次就+1,一般命名规则为"对象类型:对象ID:对象属性"
  7. total_views = r.incr('article:{}:views'.format(article.id))
  8. # zincrby(name, amount, value)方法:根据amount设定的步长增加有序集合name中的value的分值(类似于权重)
  9. # 实现了每访问一次文章就会将article_ranking中的article.id分值增加1
  10. # article_ranking中存放的是文章的id用来代表文章,每访问一次该文章就会增加文章的分值
  11. r.zincrby('article_ranking', 1, article.id)
  12. # 获取分值排名前十的对象
  13. article_ranking = r.zrange('article_ranking', 0, -1, desc=True)[:10]
  14. # 获取排名前十文章的id列表,使用的是列表推导式,先进行for循环,再将每次的的值带入int()方法运算,将结果放在新的列表中
  15. article_ranking_ids = [int(id) for id in article_ranking]
  16. print('文章浏览量对应的id:%s' % article_ranking_ids)
  17. # 查询出排名在前十的文章对象,并放在list中。注意id__in用法:id在article_ranking_ids列表中
  18. most_viewed = list(ArticlePost.objects.filter(id__in=article_ranking_ids))
  19. print('文章未排序:%s' % most_viewed)
  20. # 将获得的列表按照下表索引进行排序,lamda为匿名函数,先运算后面表达式,冒号前的x相当于参数,代表most_viewed列表中文章对象
  21. # 按照文章的id得到对应的下标,再按照下标进行排序
  22. most_viewed.sort(key=lambda x: article_ranking_ids.index(x.id))
  23. print('文章已经排序:%s' % most_viewed)
  24. return render(request, 'article/column/article_detail.html', {'article': article,
  25. 'total_views': total_views,
  26. 'most_viewed': most_viewed})

  2、前端页面

  1.  
  1. {% extends 'article/base.html' %}
    {% load staticfiles %}
    {% block title %}article detail{% endblock %}
  2.  
  3. {% block content %}
    <div class="container">
    <div class="col-md-9">
    <header>
    <h1>{{ article.title }}</h1>
    <p>{{ user.username }} {{ total_views }}次阅读</p>
    </header>
  4.  
  5. <link rel="stylesheet" href="{% static 'editor/css/editormd.preview.css' %}">
  6.  
  7. <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>
  8.  
  9. </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>
  10.  
  11. <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 %}
  1.  

使用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. hdoj1257(DP-LIS/贪心)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1257 方法1--贪心: 定义一个数组f[30005],由于题目没给数据量大小,故为了保险,开到最大(高 ...

  2. 115. Distinct Subsequences (String; DP)

    Given a string S and a string T, count the number of distinct subsequences of T in S. A subsequence ...

  3. IIS上发布站点后URL重写失效的解决方法

    在发布网站时URL重写有可能会失效,如果失效的话就需要您设置一下IIS:1.Windows XP系统或Windows 2003系统等使用以下方法:>打开IIS,主目录-〉配置-〉映射-〉在窗体左 ...

  4. 关于"undefined reference"错误

    这个错误换句话说: 链接的时候找不到实现的文件(谨记从这个入手!). 可能导致的原因有: 1. 没有链接库文件,包括静态库或动态库. 2. 链接文件的顺序问题,先后依赖问题,把被依赖的放后面. 3. ...

  5. volatile是否就是原子性/线程同步的

    在java线程并发处理中,有一个关键字volatile的使用目前存在很大的混淆,以为使用这个关键字,在进行多线程并发处理的时候就可以万事大吉. Java语言是支持多线程的,为了解决线程并发的问题,在语 ...

  6. js回车、ESC、F2按钮事件

    <script type="text/javascript" language=JavaScript charset="UTF-8"> docume ...

  7. Luogu 1070 道路游戏

    看完题面想了一会发现只会写$n^3$,愣了一会才想出了单调队列优化的做法. 90分算法: 设$f_{i, j, k}$表示第$i$分钟在第$j$座城市已经走了$k$步的最大价值,转移显然,时间复杂度$ ...

  8. 2018.09.09 bzoj4403: 序列统计(Lucas定理)

    传送门 感觉单调不降序列什么的不好做啊. 于是我们序列中下标为i的元素的值加上i,这样就构成了一个单调递增的序列. 问题就变成了: 求出构造长度分别为1 ~ n且每个元素的值在l+1 ~ r+n之间的 ...

  9. 33. Pay Gap for the Brightest Female Graduatea 最聪明的大学女毕业生面临的工资差距

    33. Pay Gap for the Brightest Female Graduatea 最聪明的大学女毕业生面临的工资差距 ① When young women were found to ma ...

  10. vi 基本使用命令

    说明:以下的例子中 xxx 表示在命令模式下输入 xxx 并回车以下的例子中 :xxx 表示在扩展模式下输入 xxx 并回车小括号中的命令表示相关命令在编辑模式或可视模式下输入的命令会另外注明 1 查 ...