我的网站搭建: (第九天) 博客统计排行

简介:     在阅读计数功能之后,就可以可根据每篇博客的阅读量来对博客进行热门统计排行了,如阅读周榜,月榜,总榜。基本上只要实现其中一个,其他两个也能照着做出来,大体上的逻辑是一样的。

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

1.周榜

import datetime
from django.utils import timezone
from django.db.models import Sum
from blog.models import Post

def get_7_days_read_posts():
    """
        作用:获取阅读量周榜博客榜单
    """
    today = timezone.now().date()
    date = today - datetime.timedelta(days=7)
    posts = Post.objects \
        .filter(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]

2.月榜

import datetime
from django.utils import timezone
from django.db.models import Sum
from blog.models import Post

def get_30_days_read_posts():
    """
        作用:获取阅读量月榜博客榜单
    """
    today = timezone.now().date()
    date = today - datetime.timedelta(days=30)
    posts = Post.objects \
        .filter(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]

3.总榜

import datetime
from django.utils import timezone
from django.db.models import Sum
from blog.models import Post

def get_all_read_posts():
    """
        作用:获取阅读量总榜博客榜单
    """
    today = timezone.now().date()
    posts = Post.objects \
        .filter(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]

    在首页视图中,还有最新发表的博客,最新推荐的博客和随机推荐的博客,他们的实现如下:

4.最新发表

from blog.models import Post

new_publish = Post.objects.all()[:15]

5.最新推荐

import datetime
from django.utils import timezone
from .models import ReadDetail

def get_new_recommend_post(content_type):
    """
        作用:获取最新推荐博客列表
        content_type:数据表的模型类
    """
    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]  # 前十五条
6.随机推荐
import random
from blog.models import Post

def get_random_recomment():
    # 随机推荐
    random_posts = set()
    post_list = Post.objects.all()
    while random_posts.__len__() < 15:
        random_posts.add(random.choice(post_list))

    return random_posts

 

相关文章
|
自动驾驶 物联网 5G
毫米波技术及其在5G网络中的应用详解
毫米波技术及其在5G网络中的应用详解
1368 3
|
9月前
|
机器学习/深度学习 数据可视化 计算机视觉
DeepSeek迁移学习与预训练模型应用
迁移学习利用预训练模型加速新任务训练,尤其在数据有限时效果显著。DeepSeek提供丰富的预训练模型和工具,支持图像、文本等多类型数据的迁移学习。本文详细介绍了如何使用DeepSeek进行特征提取、微调预训练模型、文本分类和目标检测,并通过代码示例帮助读者掌握这些技巧,解决常见问题,快速构建高性能模型。
|
消息中间件 存储 监控
RocketMQ的性能优势?
【8月更文挑战第29天】RocketMQ的性能优势?
434 2
|
机器学习/深度学习 自然语言处理 Ubuntu
FunAudioLLM 技术评测报告
【7月更文第31天】随着人工智能技术的迅速发展,语音识别和语音合成技术已经成为日常生活中不可或缺的一部分。FunAudioLLM 作为一款开源的语音大模型,致力于提供高质量的语音服务,支持多种应用场景。本次评测将重点评估 FunAudioLLM 在性能、功能及技术先进性方面的能力,并将其与国际知名的大规模语音模型进行比较。
464 2
|
算法 数据中心 Python
Python雪花代码
在这段代码中,`SnowFlake`类用于生成唯一的ID。每次调用 `generate_id`方法时,它都会生成一个新的、唯一的ID。这个ID由时间戳、数据中心ID、工作机器ID和序列号组成,确保了在不同的时间、不同的数据中心、不同的工作机器上都能生成唯一的ID。
233 1
|
机器学习/深度学习 人工智能 自然语言处理
人工智能在社交媒体分析中的用户行为预测与趋势洞察
人工智能在社交媒体分析中的用户行为预测与趋势洞察
|
Kubernetes 测试技术 微服务
k8s学习-Deployment(模板、更新、扩缩容、回滚等)
k8s学习-Deployment(模板、更新、扩缩容、回滚等)
453 0
|
机器学习/深度学习 自然语言处理 算法
AIGC背后的技术分析 | 自然语言处理与强化学习
PyTorch是当前主流深度学习框架之一,其设计追求最少的封装、最直观的设计,其简洁优美的特性使得PyTorch代码更易理解,对新手非常友好
662 0
AIGC背后的技术分析 | 自然语言处理与强化学习
|
存储 弹性计算 安全
阿里云沙特合资公司启用两座数据中心
阿里云沙特合资公司启用两座数据中心
825 0