zoukankan      html  css  js  c++  java
  • Django 统计文章阅读量(或热度排名)

    添加新字段

    为了记录文章的访问量,需要在文章的数据库表中新增一个用于存储阅读量的字段。

    1 /models.py
    2 
    3 class Post(models.Model):
    4     #其它已有字段
    5     #新添views字段记录阅读量
    6     views = models.PositiveInterField(default=0)

    注意 views 字段的类型为 PositiveInterField,该类型的值只允许为正整数或0,因为阅读量不可能

    为负数。初始化时views的值为0。

    添加模型方法

    一旦用户访问了某篇文章,只是就应该将views的值 +1,这个过程最好有post模型

    自己来完成,因此再给模型添加一个自定义的方法:

     1 /models.py
     2 
     3 class Post(models.Model):
     4     # ... 其它已有字段
     5     # 新增 views 字段记录阅读量
     6     views = models.PositiveIntegerField(default=0)
     7     
     8     # ... 其它已有的模型方法  
     9     def increase_views(self):
    10         self.views += 1
    11         self.save(update_fields=['views'])

    increase_views 方法首先将自身对应的 views 字段的值 +1(此时数据库中的值还没变),

    然后调用 save 方法将更改后的值保存到数据库。注意这里使用了 update_fields 参数

    来告诉 Django 只更新数据库中 views 字段的值,以提高效率。

    你也许担心如果两个人同时访问一篇文章,更改数据库中的阅读量字段的值时会不会冲突?

    其实不必担心,我们本来就不是精确地统计阅读量,而且个人博客的流量通常也不会很大,

    所以偶尔的冲突导致的数据误差是可以忽略不计的。

    设置热门文章排名如下

     1 def articlecont(request):
     2     #文档内容
     3     #获取显示的文章id
     4     nid = request.GET.get('nid')
     5     #获取文章
     6     articledata = models.article.objects.filter(id=nid).first()
     7     #获取到的文章调用incease_views方法
     8     models.article.increase_views(articledata)
     9     #根据自增的views字段进行排序,并获取最高的5条数据
    10     hotdoc = models.article.objects.order_by("-views")[0:5]
    11     return render(request, "articlecont.html", {"articledata": articledata,'hotdoc':hotdoc})

     

  • 相关阅读:
    【NOIP2007】守望者的逃离
    20200321(ABC)题解 by 马鸿儒 孙晨曦
    20200320(ABC)题解 by 王一帆
    20200319(ABC)题解 by 王一帆 梁延杰 丁智辰
    20200314(ABC)题解 by 董国梁 蒋丽君 章思航
    20200309(ABC)题解 by 梁延杰
    20200307(DEF)题解 by 孙晨曦
    20200306(ABC)题解 by 孙晨曦
    20200305(DEF)题解 by 孙晨曦
    20200303(ABC)题解 by 王锐,董国梁
  • 原文地址:https://www.cnblogs.com/daidechong/p/10025743.html
Copyright © 2011-2022 走看看