日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Diango博客--12.开发 Django 博客文章阅读量统计功能

發(fā)布時間:2023/12/20 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Diango博客--12.开发 Django 博客文章阅读量统计功能 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

文章目錄

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

0.models中增加新字段

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

文件位置:blog/models.py

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

注意:

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

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

3)將 editable 參數(shù)設(shè)為 False 將不允許通過 django admin 后臺編輯此字段的內(nèi)容。因為閱讀量應(yīng)該根據(jù)被訪問次數(shù)統(tǒng)計,而不應(yīng)該人為修改。

1.models中增加方法

當(dāng)用戶訪問了某篇文章,這時就應(yīng)該將 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 方法首先將自身對應(yīng)的 views 字段的值 +1(此時數(shù)據(jù)庫中的值還沒變);

2)然后調(diào)用 save 方法將更改后的值保存到數(shù)據(jù)庫。

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

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

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

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

3.修改視圖函數(shù)

當(dāng)用戶請求訪問某篇文章時,處理該請求的視圖函數(shù)為 detail 。

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

即只需在視圖函數(shù)中調(diào)用模型的 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.在模板中顯示閱讀量

在模板中顯示閱讀量和顯示其它字段一樣,只需要使用模板變量即可。即模板適當(dāng)?shù)牡胤绞褂?{{ 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>

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

總結(jié)

以上是生活随笔為你收集整理的Diango博客--12.开发 Django 博客文章阅读量统计功能的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。