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

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM