• 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})

     

  • 相关阅读:
    C#实现Dll(OCX)控件自动注册的两种方法 jason
    C#创建COM对象的方法 jason
    C#怎样判断一个特定的OCX控件是否已注册 jason
    SharePoint2007之安装网站模板 jason
    QQ的clientkey与淘宝旺旺Token 不同平台环境下的登录认证 jason
    C# 程序自动以管理员身份运行 jason
    一步一步配置aspnetdb数据库
    非常实用的常用js
    常用js页面宽度与高度
    一步一步学asp.net_ajax
  • 原文地址:https://www.cnblogs.com/daidechong/p/10025743.html
Copyright © 2020-2023  润新知