十七、Django2.1 搭建多用户的博客网站——统计文章浏览次数

目录:Django 2.1 从零开始搭建博客网站系列

服务器环境搭建(选学)

  • 在阿里云服务器从零开始上线Django项目:Ubuntu18.04+Python3+Django2,并通过公网IP访问

小试牛刀——简单的博客网站

  • 一、Django2.1 搭建简单的博客网站
  • 二、Django2.1 搭建简单的博客网站扩展——自定义模板和静态文件位置

庖丁解牛——多用户的博客网站之用户模块

  • 三、Django2.1 搭建多用户的博客网站——登录
  • 四、Django2.1 搭建多用户的博客网站——注册
  • 五、Django2.1 搭建多用户的博客网站——修改密码
  • 六、Django2.1 搭建多用户的博客网站——重置密码
  • 七、Django2.1 搭建多用户的博客网站——维护个人详细信息
  • 八、Django2.1 搭建多用户的博客网站——头像上传
  • 九、Django2.1 搭建多用户的博客网站——用户模块小结

庖丁解牛——多用户的博客网站之文章模块

  • 十、Django2.1 搭建多用户的博客网站——文章栏目
  • 十一、Django2.1 搭建多用户的博客网站——简单的文章发布
  • 十二、Django2.1 搭建多用户的博客网站——使用Markdown发布文章
  • 十三、Django2.1 搭建多用户的博客网站——修改和删除文章
  • 十四、Django2.1 搭建多用户的博客网站——向用户展示文章
  • 十五、Django2.1 搭建多用户的博客网站——文章模块小结

华丽转身——多用户的博客网站之扩展功能

  • 十六、Django2.1 搭建多用户的博客网站——文章点赞功能
  • 十七、Django2.1 搭建多用户的博客网站——统计文章浏览次数
  • 十八、Django2.1 搭建多用户的博客网站——文章评论功能
  • 十九、Django2.1 搭建多用户的博客网站——使用自定义模板标签
  • 二十、Django2.1 搭建多用户的博客网站——文章标签
  • 二十一、Django2.1 搭建多用户的博客网站——美图模块
  • 未完待续

项目源码下载:https://github.com/jt1024/lehehe

正文:

1、安装Redis

安装:在Mac环境下,执行 brew install redis 命令,可安装Redis。
启动:安装成功后,执行 redis-server /usr/local/etc/redis.conf 命令,可启动Redis。启动成功会显示如图:


十七、Django2.1 搭建多用户的博客网站——统计文章浏览次数_第1张图片
启动Redis成功

客户端:启动Redis后,再打开一个命令终端,执行 redis-cli 可以进入 Redis 客户端,成功进入后如图


十七、Django2.1 搭建多用户的博客网站——统计文章浏览次数_第2张图片
进入 Redis 客户端

Windows环境可百度自行查阅,推荐参考 http://www.runoob.com/redis/redis-install.html

2、在Python中使用Redis

执行命令 pip install redis 可安装Python的Redis库。

3、记录阅读次数

在 ./lehehe/settings.py 文件中做好数据库的配置,即在最后增加如下变量

# Redis配置
REDIS_HOST = 'localhost'
REDIS_PORT = 6379
REDIS_DB = 0

修改 ./article/list_views.py 建立与 Redis 数据库的连接,即新增如下代码

import redis
from django.conf import settings

r = redis.StrictRedis(host=settings.REDIS_HOST, port=settings.REDIS_PORT, db=settings.REDIS_DB)

修改 ./article/list_views.py 中的 article_detail 方法

def article_detail(request, id, slug):
    article = get_object_or_404(ArticlePost, id=id, slug=slug)
    total_views = r.incr("article:{}:views".format(article.id))
    return render(request, "article/list/article_content.html", {"article": article, "total_views": total_views})

修改 ./templates/article/list/article_content.html 在这行代码

{{ total_likes }}like{{ total_likes|pluralize }}

后新增如下代码

{{ total_views }} view{{ total_views|pluralize}}

打开文章详情,刷新页面,查看效果。

4、显示最热文章

修改 ./article/list_views.py 中的 article_detail 方法

def article_detail(request, id, slug):
    article = get_object_or_404(ArticlePost, id=id, slug=slug)
    total_views = r.incr("article:{}:views".format(article.id))
    r.zincrby('article_ranking', 1, article.id)

    article_ranking = r.zrange("article_ranking", 0, -1, desc=True)[:10]
    article_ranking_ids = [int(id) for id in article_ranking]
    most_viewed = list(ArticlePost.objects.filter(id__in=article_ranking_ids))
    most_viewed.sort(key=lambda x: article_ranking_ids.index(x.id))
    return render(request, "article/list/article_content.html", {"article": article, "total_views": total_views, "most_viewed": most_viewed})

修改 ./templates/article/list/article_content.html 增加如下代码

最受欢迎文章

    {% for article_rank in most_viewed %}
  1. {{ article_rank.title }}
  2. {% endfor %}

修改后的完整代码如下

{% extends "base.html" %}
{% load staticfiles %}
{% block title %}articles list{% endblock %}
{% block content %}

{% with total_likes=article.users_like.count users_like=article.users_like.all %}

{{ article.title }}

{{ article.author.username }} {{ total_likes }}like{{ total_likes|pluralize }} {{ total_views }} view{{ total_views|pluralize}}

点赞本文的读者

{% for user in article.users_like.all %}

{{user.username}}

{% empty %}

还没有人对此文章表态

{% endfor %}

最受欢迎文章

    {% for article_rank in most_viewed %}
  1. {{ article_rank.title }}
  2. {% endfor %}
{% endwith %} {% endblock %}

打开文章详情,刷新页面,查看效果。


十七、Django2.1 搭建多用户的博客网站——统计文章浏览次数_第3张图片
文章详情

你可能感兴趣的:(十七、Django2.1 搭建多用户的博客网站——统计文章浏览次数)