当前位置:
首页 >
网站搭建 (第09天) 博客统计排行
发布时间:2025/7/14
41
豆豆
生活随笔
收集整理的这篇文章主要介绍了
网站搭建 (第09天) 博客统计排行
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
一、前言
在阅读计数功能之后,就可以可根据每篇博客的阅读量来对博客进行热门统计排行了,如阅读周榜,月榜,总榜。基本上只要实现其中一个,其他两个也能照着做出来,大体上的逻辑是一样的。都是通过django自带的工具包中的timezone模块获取今天的日期格式,再通过datetime模块的timedelta方法来做日期的差值,然后筛选出这两个时间点之间发表的文章,除了总榜只需要筛选出日期小于今天发表的文章。将该时间段的博客列表筛选出来之后,通过聚合函数求出每篇文章的阅读量总和,然后进行阅读量的排序
二、周榜
import datetime from django.utils import timezone from django.db.models import Sum from blog.models import Postdef 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 Postdef 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 Postdef 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 Postnew_publish = Post.objects.all()[:15]六、最新推荐
import datetime from django.utils import timezone from .models import ReadDetaildef 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 Postdef 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_listwhile random_posts.__len__() < 15:random_posts.add(random.choice(post_list))return random_posts原文出处:https://jzfblog.com/detail/65,文章的更新编辑以此链接为准。欢迎关注源站文章!
转载于:https://www.cnblogs.com/djcoder/p/10840662.html
总结
以上是生活随笔为你收集整理的网站搭建 (第09天) 博客统计排行的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: Debian 安装docker
- 下一篇: 从零开始学习Kafka