国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Django 博客開發(fā)教程 16 - 統(tǒng)計(jì)文章閱讀量

edgardeng / 2608人閱讀

如何精確地記錄一篇文章的閱讀量是一個(gè)比較復(fù)雜的問題,不過對于我們的博客來說,沒有必要記錄的那么精確。因此我們使用一種簡單但有效的方式來記錄博客文章的閱讀量:文章每被瀏覽一次,則其閱讀量 +1,即所謂的文章頁面 PV(Page View)數(shù)。雖然簡單粗暴,但卻高效實(shí)用。

增加新字段

為了記錄文章的瀏覽量,需要在文章的數(shù)據(jù)庫表中新增一個(gè)用于存儲閱讀量的字段。因此給博客文章的模型新增一個(gè) views 字段:

blog/models.py

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

注意 views 字段的類型為 PositiveIntegerField,該類型的值只允許為正整數(shù)或 0,因?yàn)殚喿x量不可能為負(fù)值。初始化時(shí) views 的值為 0。

增加模型方法

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

blog/models.py

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

increase_views 方法首先將自身對應(yīng)的 views 字段的值 +1(此時(shí)數(shù)據(jù)庫中的值還沒變),然后調(diào)用 save 方法將更改后的值保存到數(shù)據(jù)庫。注意這里使用了 update_fields 參數(shù)來告訴 Django 只更新數(shù)據(jù)庫中 views 字段的值,以提高效率。

你也許擔(dān)心如果兩個(gè)人同時(shí)訪問一篇文章,更改數(shù)據(jù)庫中的閱讀量字段的值時(shí)會不會沖突?其實(shí)不必?fù)?dān)心,我們本來就不是精確地統(tǒng)計(jì)閱讀量,而且個(gè)人博客的流量通常也不會很大,所以偶爾的沖突導(dǎo)致的數(shù)據(jù)誤差是可以忽略不計(jì)的。

遷移數(shù)據(jù)庫

一旦更改了模型,就需要遷移數(shù)據(jù)庫,以便讓 Django 將更改反應(yīng)到數(shù)據(jù)庫中。激活虛擬環(huán)境,運(yùn)行如下兩條命令:

python manage.py makemigrations
python manage.py migrate

關(guān)于數(shù)據(jù)庫的遷移,具體可以參照 讓 Django 完成翻譯:遷移數(shù)據(jù)庫模型。

修改視圖函數(shù)

當(dāng)用戶請求訪問某篇文章時(shí),處理該請求的視圖函數(shù)為 detail 。一旦該視圖函數(shù)被調(diào)用,說明文章被訪問了一次,因此我們修改 detail 視圖函數(shù),讓被訪問的文章在視圖函數(shù)被調(diào)用時(shí)閱讀量 +1。

blog/views.py

def detail(request, pk):
    post = get_object_or_404(Post, pk=pk)
    
    # 閱讀量 +1
    post.increase_views()
    
    post.body = markdown.markdown(post.body,
                                  extensions=[
                                      "markdown.extensions.extra",
                                      "markdown.extensions.codehilite",
                                      "markdown.extensions.toc",
                                  ])
    form = CommentForm()
    comment_list = post.comment_set.all()
    context = {"post": post,
               "form": form,
               "comment_list": comment_list
               }
    return render(request, "blog/detail.html", context=context)

即只需在視圖函數(shù)中調(diào)用模型的 increase_views 方法即可。

在模板中顯示閱讀量

在模板中顯示閱讀量和顯示其它字段一樣,只需要使用模板變量即可。即模板適當(dāng)?shù)牡胤绞褂?{{ post.views }} 模板變量。這里我們分別修改兩個(gè)地方,分別是 index.html 和 detail.html。

templates/blog/index.html

templates/blog/detail.html

好了,這樣當(dāng)用戶每訪問一次文章詳情,views 記錄的數(shù)值就會 +1,從而達(dá)到粗略統(tǒng)計(jì)閱讀量的目的。

總結(jié)

本章節(jié)的代碼位于:Step16: record post views。

如果遇到問題,請通過下面的方式尋求幫助。

在 統(tǒng)計(jì)文章閱讀量 - 追夢人物的博客 評論區(qū)留言。

將問題的詳細(xì)描述通過郵件發(fā)送到 djangostudyteam@163.com,一般會在 24 小時(shí)內(nèi)回復(fù)。

更多Django 教程,請?jiān)L問 追夢人物的博客。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/44414.html

相關(guān)文章

  • Django 博客開發(fā)教程 13 - 已知小問題修正

    摘要:所以,讓我們再接再厲,進(jìn)入到博客開發(fā)進(jìn)階教程,學(xué)習(xí)更多的開發(fā)技巧,為博客提供更多的功能吧總結(jié)本章節(jié)的代碼位于。在已知小問題修正追夢人物的博客的評論區(qū)留言。將問題的詳細(xì)描述通過郵件發(fā)送到,一般會在小時(shí)內(nèi)回復(fù)。更多教程,請?jiān)L問追夢人物的博客。 在模型中指定排序 為了讓文章(Post)按發(fā)布時(shí)間逆序排列,即最新發(fā)表的文章排在文章列表的最前面,我們對返回的文章列表進(jìn)行了排序,即各個(gè)視圖函數(shù)中都...

    bergwhite 評論0 收藏0
  • Django 博客開發(fā)教程 6 - 真正的 Django 博客首頁視圖

    摘要:在此之前我們已經(jīng)編寫了的首頁視圖,并且配置了和模板,讓能夠正確地處理請求并返回合適的響應(yīng)。正確引入了靜態(tài)文件后樣式顯示正常了。在真正的博客首頁視圖追夢人物的博客的評論區(qū)留言。更多教程,請?jiān)L問追夢人物的博客。 在此之前我們已經(jīng)編寫了 Blog 的首頁視圖,并且配置了 URL 和模板,讓 Django 能夠正確地處理 HTTP 請求并返回合適的 HTTP 響應(yīng)。不過我們僅僅在首頁返回了一句...

    yzzz 評論0 收藏0
  • Django 博客開發(fā)教程 3 - 創(chuàng)建 Django 博客的數(shù)據(jù)庫模型

    摘要:而對于標(biāo)簽來說,一篇文章可以有多個(gè)標(biāo)簽,同一個(gè)標(biāo)簽下也可能有多篇文章,所以我們使用,表明這是多對多的關(guān)聯(lián)關(guān)系。理解多對一和多對多兩種關(guān)聯(lián)關(guān)系我們分別使用了兩種關(guān)聯(lián)數(shù)據(jù)庫表的形式和。表明一種一對多的關(guān)聯(lián)關(guān)系。 設(shè)計(jì)博客的數(shù)據(jù)庫表結(jié)構(gòu) 博客最主要的功能就是展示我們寫的文章,它需要從某個(gè)地方獲取博客文章數(shù)據(jù)才能把文章展示出來,通常來說這個(gè)地方就是數(shù)據(jù)庫。我們把寫好的文章永久地保存在數(shù)據(jù)庫里,...

    Shimmer 評論0 收藏0
  • 個(gè)人博客三|首頁后臺開發(fā)

    摘要:聲明本渣渣部分代碼參考自其實(shí)有很多代碼是不需要自己一行行碼出來,生產(chǎn)力是第一位。只有研究型人才需要生產(chǎn)代碼,作為一名渣渣拿來用是最高效的做法。程序員都有一個(gè)開源的精神,碼出來的代碼本身是希望更多的人用到,應(yīng)用到生產(chǎn)中。 聲明:本渣渣部分代碼參考自TendCode其實(shí)有很多代碼是不需要自己一行行碼出來,生產(chǎn)力是第一位。只有研究型人才需要生產(chǎn)代碼,作為一名渣渣拿來用是最高效的做法。程序員都...

    zorpan 評論0 收藏0
  • 個(gè)人博客三|首頁后臺開發(fā)

    摘要:聲明本渣渣部分代碼參考自其實(shí)有很多代碼是不需要自己一行行碼出來,生產(chǎn)力是第一位。只有研究型人才需要生產(chǎn)代碼,作為一名渣渣拿來用是最高效的做法。程序員都有一個(gè)開源的精神,碼出來的代碼本身是希望更多的人用到,應(yīng)用到生產(chǎn)中。 聲明:本渣渣部分代碼參考自TendCode其實(shí)有很多代碼是不需要自己一行行碼出來,生產(chǎn)力是第一位。只有研究型人才需要生產(chǎn)代碼,作為一名渣渣拿來用是最高效的做法。程序員都...

    姘擱『 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<