Diango博客--12.開發 Django 博客文章閱讀量統計功能

文章目錄

    • 0.models中增加新字段
    • 1.models中增加方法
    • 2.遷移數據庫
    • 3.修改視圖函數
    • 4.在模板中顯示閱讀量

0.models中增加新字段

為了記錄文章的瀏覽量,需要在文章的數據庫表中新增一個用于存儲閱讀量的字段。

文件位置:blog/models.py

class Post(models.Model):# ... 其它已有字段# 新增 views 字段記錄閱讀量views = models.PositiveIntegerField(default=0, editable=False)

注意:

1)views 字段的類型為 PositiveIntegerField,該類型的值只允許為正整數或 0,因為閱讀量不可能為負值。

2)初始化時 views 的值為 0。

3)將 editable 參數設為 False 將不允許通過 django admin 后臺編輯此字段的內容。因為閱讀量應該根據被訪問次數統計,而不應該人為修改。

1.models中增加方法

當用戶訪問了某篇文章,這時就應該將 views 的值 +1,這個過程最好由 Post 模型自己來完成,因此再給模型添加一個自定義的方法:

文件位置:blog/models.py

class Post(models.Model):# ... 其它已有字段# 新增 views 字段記錄閱讀量views = models.PositiveIntegerField(default=0)# ... 其它已有的模型方法def increase_views(self):self.views += 1self.save(update_fields=['views'])

注意:

1)increase_views 方法首先將自身對應的 views 字段的值 +1(此時數據庫中的值還沒變);

2)然后調用 save 方法將更改后的值保存到數據庫。

3)注意這里使用了 update_fields 參數來告訴 Django 只更新數據庫中 views 字段的值,以提高效率。

2.遷移數據庫

一旦更改了模型,就需要遷移數據庫,以便讓 Django 將更改反應到數據庫中。在項目根目錄運行如下兩條命令:

$ pipenv run python manage.py makemigrations
$ pipenv run python manage.py migrate

3.修改視圖函數

當用戶請求訪問某篇文章時,處理該請求的視圖函數為 detail 。

一旦該視圖函數被調用,說明文章被訪問了一次,因此我們修改 detail 視圖函數,讓被訪問的文章在視圖函數被調用時閱讀量 +1

即只需在視圖函數中調用模型的 increase_views 方法即可。

文件位置:blog/views.py

def detail(request, pk):post = get_object_or_404(Post, pk=pk)# 閱讀量 +1post.increase_views()md = markdown.Markdown(extensions=['markdown.extensions.extra','markdown.extensions.codehilite',# 記得在頂部引入 TocExtension 和 slugifyTocExtension(slugify=slugify),])post.body = md.convert(post.body)m = re.search(r'<div class="toc">\s*<ul>(.*)</ul>\s*</div>', md.toc, re.S)post.toc = m.group(1) if m is not None else ''return render(request, 'blog/detail.html', context={'post': post})

4.在模板中顯示閱讀量

在模板中顯示閱讀量和顯示其它字段一樣,只需要使用模板變量即可。即模板適當的地方使用 {{ post.views }} 模板變量。

這里我們分別修改兩個地方,分別是 index.html 和 detail.html。

文件位置:templates/blog/index.html

<div class="entry-meta">...<span class="views-count"><a href="{{ post.get_absolute_url }}">{{ post.views }} 閱讀</a></span>
</div>

文件位置:templates/blog/detail.html

<div class="entry-meta">...<span class="views-count"><a href="#">{{ post.views }} 閱讀</a></span>
</div>

至此,當用戶每訪問一次文章詳情,views 記錄的數值就會 +1,從而達到粗略統計閱讀量的目的。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/452416.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/452416.shtml
英文地址,請注明出處:http://en.pswp.cn/news/452416.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

c++ try_catch throw

使用throw拋出異常 本人節選自《21天學通C》一書 拋出異常&#xff08;也稱為拋棄異常&#xff09;即檢測是否產生異常&#xff0c;在C中&#xff0c;其采用throw語句來實現&#xff0c;如果檢測到產生異常&#xff0c;則拋出異常。該語句的格式為&#xff1a; throw 表達式…

數字證書和數字簽名

什么是數字證書&#xff1f;由于Internet網電子商務系統技術使在網上購物的顧客能夠極其方便輕松地獲得商家和企業的信息,但同時也增加了對某些敏感或有價值的數據被濫用的風險. 為了保證互聯網上電子交易及支付的安全性,保密性等&#xff0c;防范交易及支付過程中的欺詐行為&a…

域名劫持

轉載于:https://www.cnblogs.com/xinghen1216/p/8548323.html

cesium html源碼,Cesium源碼的本地運行及調試

CesiumJS源碼運行有兩種方式&#xff1a;基于node.js運行官方下載地址&#xff1a;https://cesium.com/cesiumjs/下載解壓后&#xff0c;在根目錄安裝依賴后&#xff0c;就可直接運行npm initnpm start如果調試代碼呢&#xff0c;官方的示例都是在Sandcastle里放著&#xff0c;…

Diango博客--13.將“視圖函數”類轉化為“類視圖”

文章目錄0.思路引導1.ListView2.將 index 視圖函數改寫為類視圖3.將 category 視圖函數改寫為類視圖4.將 archive 視圖函數改寫成類視圖5.將 tag 視圖函數改寫成類視圖6.DetailView7.將DetailView視圖函數改寫成類視圖0.思路引導 1&#xff09;在開發網站的過程中&#xff0c;…

es6之數據結構 set,WeakSet,mapWeakMap

{let list new Set();list.add(1);list.add(2);list.add(1);console.log(list); //Set(2) {1, 2} let arr[1,2,3,1,2] let list2new Set(arr); console.log(list2); //Set(3) {1, 2, 3} } Set ES6 提供了新的數據結構 Set。它類似于數組&#xff0c;但是成員的值都是唯一的&a…

關于C語言中繼承和多態的實現

以下的內容綜合了多篇文章&#xff0c;加上一點自己的理解而成。目的為了給自己閱讀他們文章后做一個筆記。在末尾給出了這些文章的地址。 多態的實現可以采用以下幾種方式&#xff1a; (1)使用 vod * (萬能指針)來實現“編譯時多態”。 (2)使用函數指針來實現“運行時…

邊界測試

邊界條件邊界測試是單元測試中最后的也可能是最重要的任務。 軟件常常在它的邊界上失效&#xff0c;例如&#xff0c;處理n元數組的第n個元素時&#xff0c;或做到i次循環中的第i次重復時&#xff0c;往往會發生錯誤。 使用剛好小于、剛好等于和剛好大于最大值或最小值的數據結…

阿里云上Kubernetes集群聯邦

摘要&#xff1a; kubernetes集群讓您能夠方便的部署管理運維容器化的應用。但是實際情況中經常遇到的一些問題&#xff0c;就是單個集群通常無法跨單個云廠商的多個Region&#xff0c;更不用說支持跨跨域不同的云廠商。這樣會給企業帶來一些擔憂&#xff0c;如何應對可用區級別…

缺氧游戲計算機,缺氧PC最低什么配置一覽 你覺得高嗎

缺氧PC最低什么配置一覽&#xff0c;你覺得高嗎。游戲對于電腦有不同程度的要求&#xff0c;缺氧這款游戲也有著自己的配置要求&#xff0c;看看下面的缺氧PC最低什么配置一覽&#xff0c;你的硬件夠得上嗎。缺氧最低配置&#xff1a;首先公布的是官 方配置需求&#xff0c;目前…

Diango博客--14.使用 Django 項目中的 ORM 編寫偽造測試數據腳本

文章目錄0.思路引導1.腳本目錄結構2.使用 Faker 快速生成測試數據3.批量生成測試數據4.執行腳本5.效果展示0.思路引導 1&#xff09;為了防止博客首頁展示的文章過多以及提升加載速度&#xff0c;可以對文章列表進行分頁展示。 2&#xff09;不過這需要比較多的文章才能達到分…

基于Sql Server 2008的分布式數據庫的實踐

配置Sql Server 2008&#xff08;Win7&#xff09; 1.打開SQL server2012&#xff0c;使用windows身份登錄 2.登錄后&#xff0c;右鍵選擇“屬性”。左側選擇“安全性”&#xff0c;選中右側的“SQL Server 和 Windows 身份驗證模式”以啟用混合登錄模式 3.選擇“連接”&#x…

橫向技術分析C#、C++和Java優劣

本文將從技術人員的角度橫向分析C#、C和Java優劣&#xff0c;其實選擇Java陣營還是.NET陣營&#xff0c;大家可以根據自己的實際需要來確定。 C#誕生之日起&#xff0c;關于C#與Java之間的論戰便此起彼伏&#xff0c;至今不輟。拋卻Microsoft與Sun之間的恩怨與口角&#xff0c;…

軟件測試中的存根程序

存根程序用來代替被測試的模塊所調用的模塊&#xff0c;因此存根程序也稱為“虛擬子程序”&#xff0c;它利用被它代替的模塊的接口&#xff0c;只做盡可能少的數據操作。

計算機網絡應用云計算,計算機網絡云計算的類型

原標題&#xff1a;計算機網絡云計算的類型隨著現代計算機網絡技術的不斷發展&#xff0c;越來越多的與計算機網絡有關的現代化技術得以出現&#xff0c;并且有著廣泛的應用&#xff0c;其中云計算技術就是比較常見的一種&#xff0c;在實際應用中發揮著較高的價值。在信息時代…

sublime_text快捷鍵

1、注釋&#xff1a;選中文本后&#xff0c;CTRL / 2、CTRL N,CTRLS&#xff0c;保存成.html文件后&#xff0c;只需要輸入感嘆號&#xff01;&#xff0c;然后tab鍵&#xff0c;即可打印出基本的html格式&#xff01;轉載于:https://www.cnblogs.com/JAVA-STUDYER/p/855040…

Diango博客--15.通過 Django Pagination 實現簡單分頁(一)

文章目錄0.思路引導1.Paginator 類的常用方法2.用 Paginator 給文章列表分頁3.在模板中設置分頁導航4.效果展示0.思路引導 1&#xff09;當博客上發布的文章越來越多時&#xff0c;通常需要進行分頁顯示&#xff0c;以免所有的文章都堆積在一個頁面&#xff0c;影響用戶體驗。…

SpringMVC 測試 mockMVC

SpringMVC測試框架 基于RESTful風格的SpringMVC的測試&#xff0c;我們可以測試完整的Spring MVC流程&#xff0c;即從URL請求到控制器處理&#xff0c;再到視圖渲染都可以測試。 一 MockMvcBuilder MockMvcBuilder是用來構造MockMvc的構造器&#xff0c;其主要有兩個實現&…

自頂向下和自底向上測試的優缺點

自頂向下測試方法的主要優點是不需要測試驅動程序&#xff0c;能夠在測試階段的早期實現并驗證系統的主要功能&#xff0c;而且能在早期發現上層模塊的接口錯誤。 自頂向下測試方法的主要缺點是需要存根程序&#xff0c;可能遇到與此相聯系的測試困難&#xff0c;低層關鍵模塊中…

C++ class中的靜態(static)成員

C class中的靜態(static)成員 &#xff08;1&#xff09; 靜態數據成員 ①一般地靜態數據成員在該類定義之外被初始化&#xff0c;如同一個成員函數被定義在類定義之外一樣。在這種定義中的靜態成員的名字必須被其類名限定修飾&#xff0c;例如下面是_interestRate的初始…