使用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 %}
 

原文地址:https://www.cnblogs.com/gcgc/p/10670528.html

时间: 2024-11-06 14:44:14

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

今日头条运营秘诀分享:让你的文章阅读量和收入都“飞”起来

1. 互联网发展纯熟,我们进入了自媒体时代.人们借助自媒体平台可以分享内容,这种分享有私人化.平民化.普泛化.自主化的特点.而这也让我们迎来了内容创业这个大机遇. 对于内容创作者来说,在这个时代,无疑是幸福的.因为创作内容不再只是兴趣爱好,陶冶情操,也可以利用这个兴趣来赚钱,获得美好的酬劳. 现在内容平台有很多,有的可以通过发布内容来获取收入,有的则能够获得机会.不同的平台有不同的风格和规则,顺应这些规则来运营才能够有好的效果. 今天,time给大家分享一下关于今日头条的运营方法和秘诀,让你的文

自媒体怎么提升收益,如何提升自媒体文章阅读量?

现在自媒体文章出现一个很明显的数据趋势,那就是普通自媒体人的文章阅读量越来越少,那些大咖们的文章阅读量越来越多,现在还有很多自媒体人可能连推荐量都没有. 样的情况是现在很常见的,那我们应该怎样维护个人利益改变这种趋势呢?首先,我们要明白一个问题,那就是在名气方面我们自然是不能和大咖.明星想比,我们只能是做好内容质量,抓住平台的运营规则去做内容,这样才能够更好地提升阅读量! 1.文章内容符合标题 文章内容也是要符合标题的,为什么说会有标题党的出现,很大原因就是因为他们标题很吸引人,但是文章质量完全

Django 统计文章阅读量(或热度排名)

添加新字段 为了记录文章的访问量,需要在文章的数据库表中新增一个用于存储阅读量的字段. 1 /models.py 2 3 class Post(models.Model): 4 #其它已有字段 5 #新添views字段记录阅读量 6 views = models.PositiveInterField(default=0) 注意 views 字段的类型为 PositiveInterField,该类型的值只允许为正整数或0,因为阅读量不可能 为负数.初始化时views的值为0. 添加模型方法 一旦用

28.为什么技术文章阅读量只几千,鸡汤文却轻松过万

前段时间,timyang(新浪微薄技术总监)在群里发问:"我的疑惑是所有比较受欢迎的技术文章,阅读数为什么停在几千:朋友圈看到也不点,由于阅读数上不去,大家都要拼标题". 这是个很有意思的话题,我们可以借此为契机,看一下在pc互联网和微信中: 1.      信息传播的变化 2.      各自属性 1.    信息传播的变化 在传统的互联网中,获取信息的主要渠道是什么? 是搜索!!!造就了百度的搜索. 搜索有什么特点? 1.      具有主动性.当我搜索的时候,是对某个技术感到兴趣

wordpress文章统计插件:WP-PostViews让你的文章阅读量及时更新

新安装的wordpress博客,打开文章是不刷新文章的阅读数量的,但是我们可以借助WP-PostViews插件,来及时更新我们的文章统计数量.接下来泽业建站网就给新手们一个完整的新手教程,教大家使用这个插件. 第一步:安装和启用插件. 方法:后台首页--插件--安装插件--搜索WP-PostViews,选择第一个由Lester 'GaMerZ' Chan开发的WP-PostViews插件,点击现在安装,安装以后,再点击启用即可.启用以后如图: 安装WP-PostViews插件 第二步:添加代码.

杨泽业:WP-PostViews文章统计插接让你的文章阅读量及时更新

新安装的wordpress博客,打开文章是不刷新文章的阅读数量的,但是我们可以借助WP-PostViews插件,来及时更新我们的文章统计数量.接下来泽业建站网就给新手们一个完整的新手教程,教大家使用这个插件. 第一步:安装和启用插件. 方法:后台首页--插件--安装插件--搜索WP-PostViews,选择第一个由Lester 'GaMerZ' Chan开发的WP-PostViews插件,点击现在安装,安装以后,再点击启用即可.启用以后如图: 安装WP-PostViews插件 第二步:添加代码.

Web Worker——js的多线程,实现统计博客园总阅读量

前言 众所周知,js是单线程的,从上往下,从左往右依次执行,当我们有耗时的任务需要处理时,便会阻塞线程造成页面卡顿等问题.web worker的目的,就是为JavaScript创造多线程环境,允许主线程将一些任务分配给子线程.在主线程运行的同时,子线程在后台运行,两者互不干扰.等到子线程完成计算任务,再把结果返回给主线程.因此,每一个子线程就好像一个“工人”(worker),默默地完成自己的工作.更多worker的介绍请戳:JavaScript标准参考教程 本文通过web worker 统计博客

微信公众号互阅平台-真实提高阅读量-「作者加鸡腿」

环境:微信个人订阅号 建了个互阅的平台,平台用户100+人,纯人工真实阅读,迅速阅读100+. 希望有想提高文章阅读量的小伙伴扫一下下方二维码,备注「加鸡腿」拉你. 原文地址:https://www.cnblogs.com/niceyoo/p/12156058.html

为Typecho增加文章阅读次数统计功能

文章次数统计是比较常用的功能,插件一搜一堆,下面说说把这个功能集成到主题里的方法:把下面这段代码放到主题文件functions.php中 function Postviews($archive) { $db = Typecho_Db::get(); $cid = $archive->cid; if (!array_key_exists('views', $db->fetchRow($db->select()->from('table.contents')))) { $db->