zoukankan      html  css  js  c++  java
  • 【9】网站搭建:博客统计排行

    一、前言

      ​在阅读计数功能之后,就可以可根据每篇博客的阅读量来对博客进行热门统计排行了,如阅读周榜,月榜,总榜。基本上只要实现其中一个,其他两个也能照着做出来,大体上的逻辑是一样的。都是通过django自带的工具包中的timezone模块获取今天的日期格式,再通过datetime模块的timedelta方法来做日期的差值,然后筛选出这两个时间点之间发表的文章,除了总榜只需要筛选出日期小于今天发表的文章。将该时间段的博客列表筛选出来之后,通过聚合函数求出每篇文章的阅读量总和,然后进行阅读量的排序

    二、周榜

    import datetime
    from django.utils import timezone
    from django.db.models import Sum
    from blog.models import Post
    
    def get_7_days_read_posts():
        """
        作用:获取阅读量周榜博客榜单
        :return: 周榜博客前15条博客
        """
        today = timezone.now().date()
        date = today - datetime.timedelta(days=7)
        posts = Post.objects 
            .filter(Q(display=0) | Q(display__isnull=True), read_detail__date__lt=today, read_detail__date__gte=date) 
            .values('id', 'title') 
            .annotate(read_num_sum=Sum('read_detail__read_num')) 
            .order_by('-read_num_sum')
        return posts[:15]

    三、月榜

    import datetime
    from django.utils import timezone
    from django.db.models import Sum
    from blog.models import Post
    
    def get_30_days_read_posts():
        """
        作用:获取阅读量月榜博客榜单
        :return: 月榜博客前15条博客
        """
        today = timezone.now().date()
        date = today - datetime.timedelta(days=30)
        posts = Post.objects 
            .filter(Q(display=0) | Q(display__isnull=True), read_detail__date__lt=today, read_detail__date__gte=date) 
            .values('id', 'title') 
            .annotate(read_num_sum=Sum('read_detail__read_num')) 
            .order_by('-read_num_sum')
        return posts[:15]

    四、总榜

    import datetime
    from django.utils import timezone
    from django.db.models import Sum
    from blog.models import Post
    
    def get_all_read_posts():
        """
        作用:获取阅读量总榜博客榜单
        :return: 总榜博客前15条博客
        """
        today = timezone.now().date()
        posts = Post.objects 
            .filter(Q(display=0) | Q(display__isnull=True), read_detail__date__lt=today) 
            .values('id', 'title') 
            .annotate(read_num_sum=Sum('read_detail__read_num')) 
            .order_by('-read_num_sum')
        return posts[:15]

    五、最新发表

    from blog.models import Post
    
    new_publish = Post.objects.all()[:15]

    六、最新推荐

    import datetime
    from django.utils import timezone
    from .models import ReadDetail
    
    def get_new_recommend_post(content_type):
        """
        作用:获取最新推荐博客列表
        :param content_type: 数据表的模型类
        :return: 最新推荐的前15条博客
        """
        today = timezone.now().date()
        yesterday = today - datetime.timedelta(days=1)
        read_detail = ReadDetail.objects.filter(content_type=content_type, date=yesterday).order_by('-read_num')
        return read_detail[0:15]  # 前十五条

    七、随机推荐

    import random
    from blog.models import Post
    
    def get_random_recomment():
        """
        作用:获取随机推荐博客列表
        :return: 随机推荐的前15条博客
        """
        # 随机推荐
        random_posts = set()
    
        post_list = Post.objects.filter(Q(display=0) | Q(display__isnull=True))
        if post_list.count() < 15:
            return post_list
    
        while random_posts.__len__() < 15:
            random_posts.add(random.choice(post_list))
    
        return random_posts

      原文出处:https://jzfblog.com/detail/65,文章的更新编辑以此链接为准。欢迎关注源站文章!

    作者:蒋振飞
    此内容均来自个人原创以及互联网转载和摘录,仅供学习交流使用,并非商业用途,欢迎转载。
  • 相关阅读:
    free解释
    无损 JBIG2 编码库(Lossless JBIG2 Encoder)
    PDF补丁丁暂停更新
    PDF补丁丁将字符识别结果写入PDF文件功能即将完成
    PDF补丁丁0.3.3版:字符识别结果写入PDF文件功能邀请测试
    PDF补丁丁 0.3.3.58版修复打开、输出超大型PDF文件问题
    PDF补丁丁0.3.3版即将发布
    PDF补丁丁0.3.3.12 新增查看PDF文件隐藏对象及导出流对象功能
    PDF 补丁丁 0.3.3 正式版发布
    PDF 补丁丁0.3.3.20版新增JBIG2压缩功能,可为扫描PDF瘦身
  • 原文地址:https://www.cnblogs.com/djcoder/p/10840662.html
Copyright © 2011-2022 走看看