网站搭建 (第09天) 博客统计排行
生活随笔
收集整理的這篇文章主要介紹了
网站搭建 (第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