【小白实战】利用django2.0,搭建属于自己的博客(8)


发布时间:2019-02-15 13:08    作者: Uncle Hui   已过去:1 年,4 月   阅读总量:655 已被赞:0


实现文章阅读人数的按天统计:

def post_read(request,post_id):
    #获取指定的文章,get_object_or_404等于Post.objects.filter(),并且如果传递来不合格参数,
直接现实内置404,不会报错
    post = get_object_or_404(Post,pk=post_id)
    #获取今天的日期
    today = datetime.datetime.now().date()
    #新建日期列表,存放遍历出来的日期
    dates=[]
    # 新建阅读量列表,存放遍历出来的每天的阅读量
    post_read_num = []
    #遍历出过去7天,每天的日期
    for i in range(7,0,-1):
        #每循环一次,日期倒退一天
        date = today - datetime.timedelta(days=i)
        #将日期存放进列表,并用strftime方法格式化
        dates.append(date.strftime('%m/%d'))
        #去阅读数量统计表里查找出当前阅读的文章和指定的日期的文章
        posts = Read_post.objects.filter(post_title=post_id,read_time=date)
        #通过聚合函数aggregate,分组计算,以read_num字段求和,并将结果保存到read_num_sum中
        num = posts.aggregate(read_num_sum=Sum('read_num'))
        #将结果保存到列表里,如果获取不到值,就保存为0
        post_read_num.append(num['read_num_sum'] or 0)
        #文章阅读人数记录
        #判断COOKIES里是不是有post_id,如果没有,说明是这篇文章的新访问者
    if not request.COOKIES.get('blog_%s_readed' % post_id):
        #去文章表里塞选一下,看看今天这个日期,有没有这篇文章的记录
        num_post =Read_post.objects.filter(post_title=post_id,read_time=today).first()
       #如果有,直接在阅读数量的字段上+1
        if num_post :
            num_post.read_num += 1
        #如果没有
        else:
        #将Read_post类实例化
            num_post = Read_post()
        #将这条帖子存放进关联字段post_title,
        # 注意,这里是存入这条文章的整体,不是具体某个值。不能是post.pk这样的。
            num_post.post_title = post
        #将人数字段写为1
            num_post.read_num = 1
        #统一保存
        num_post.save()
    # 统计这篇文章的全部阅读总量
    post_num_sum = Read_post.objects.filter(post_title=post_id).aggregate(read_num_sums=Sum('read_num'))
    content = {
                'post':post,
                'dates':dates,
                'post_read_num':post_read_num,
                'post_num_sum':post_num_sum
    }
    #使用render渲染到前台
    response =render(request, 'blog/post_read.html', content)
    #给浏览器加入本片文章的ID
    response.set_cookie('blog_%s_readed' % post_id, 'true')
    return response

点赞

0




登陆后方可评论