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

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

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

 

相关文章
|
数据采集 存储 Web App开发
Python爬虫系列8-抓取快乐8、刮刮乐、双色球等中奖数据分析规律
人在绝大多数情况下,只要稍微有那么一点的退路,有那么一点余地,就可以成为逃避的借口和理由。努力装装样子,然后给自己一个台阶下,安慰自己说,“你看我已经很努力了,还是不行,那就算了吧”。 老话说得好:只有主动追求的东西才能到手;只要你想做,全世界都会帮你;只要你不想做,一只蚊子都能拦住你。虽说未来可期,但如果你连相信自己的勇气都没有,还有什么资格得到更好的呢。对吧!
1540 0
Python爬虫系列8-抓取快乐8、刮刮乐、双色球等中奖数据分析规律
|
20天前
|
数据采集 Python
爬虫练手:某网图书畅销榜排名数据
爬虫练手:某网图书畅销榜排名数据
27 0
|
2月前
聚合博客网址导航大全代码分享
博友大全 - 博客大全|独立博客大全|博客导航|优秀博客大全http://m.bokequ.com/list/22-1.html
24 6
|
5月前
|
监控 前端开发 JavaScript
网站统计网页浏览量的一般技术介绍
网站统计网页浏览量的一般技术介绍
|
程序员
【蓝桥杯基础题】2018年省赛—日志统计
【蓝桥杯基础题】2018年省赛—日志统计
【蓝桥杯基础题】2018年省赛—日志统计
|
数据采集 数据安全/隐私保护
爬虫基础-第三天
第三天虽然内容不多,不过需要大量练习,最好自己总结一波
77 0
CSDN博客排名记录
CSDN博客排名记录
174 0
CSDN博客排名记录
我的网站搭建: (第七天) 简单阅读计数
 如果知道每篇文章的浏览量,管理员就可以了解到访问者对文章的喜好程度,方便后续推出相关内容文章,同时对热门博客的统计和阅读趋势图打好基础。
1329 0
|
Python
我的网站搭建: (第八天) 阅读计数优化
    上篇写了几个简单的阅读计数,其缺点都是无法统计某一天的阅读数量,也就无法根据日期来对热门博客进行排行。所以最好还是重建一个带有日期字段名的模型表,这就可以根据日期条件来筛选博客的阅读次数了,比较方便统计。
1272 0
【全网最全的博客美化系列教程】04.访客量统计的实现
全网最全的博客美化系列教程相关文章目录 【全网最全的博客美化系列教程】01.添加Github项目链接 【全网最全的博客美化系列教程】02.添加QQ交谈链接 【全网最全的博客美化系列教程】03.给博客添加一只萌萌哒的小仓鼠 【全网最全的博客美化系列教程】04.
1267 0