網站搭建 (第09天) 博客統計排行
阿新 • • 發佈:2019-05-09
djang play 最新 lte 日期格 random ron 作用 recommend
一、前言
?在閱讀計數功能之後,就可以可根據每篇博客的閱讀量來對博客進行熱門統計排行了,如閱讀周榜,月榜,總榜。基本上只要實現其中一個,其他兩個也能照著做出來,大體上的邏輯是一樣的。都是通過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,文章的更新編輯以此鏈接為準。歡迎關註源站文章!
網站搭建 (第09天) 博客統計排行