Django3.0+Python3.8+MySQL8.0 個人博客搭建十八|功能完善


目前個人博客基礎功能基本實現。最後再對博客的一些細節進行完善一下即可,可能還有很多細節,就不一一處理了。

這裏準備處理三個重要的細節,

  1. 瀏覽量、
  2. 喜歡、
  3. 訪問路徑

一、瀏覽量

blog -> fswy -> views.py

在詳情頁DetailView視圖中添加瀏覽量增加功能:

  1. 不能是作者瀏覽,作者本人瀏覽不增加瀏覽量
  2. 訪客瀏覽,瀏覽不能打開一次就算一次瀏覽,必須是訪問間隔超過半個小時才能記錄下一次瀏覽
def get_object(self):
    obj = super(DetailView, self).get_object()
    # 設置瀏覽量增加時間判斷,同一篇文章兩次瀏覽超過半小時才重新統計閱覽量,作者瀏覽忽略
    u = self.request.user
    ses = self.request.session
    the_key = 'is_read_{}'.format(obj.id)
    is_read_time = ses.get(the_key)

    if u != obj.author:
        if not is_read_time:
            obj.update_views()
            ses[the_key] = time.time()
        else:
            now_time = time.time()
            t = now_time - is_read_time
            if t > 60 * 30:
                obj.update_views()
                ses[the_key] = time.time()
    md = markdown.Markdown(extensions=[
        'markdown.extensions.extra',
        'markdown.extensions.codehilite',
        TocExtension(slugify=slugify),
    ])
    obj.body = md.convert(obj.body)
    obj.toc = md.toc
    return obj

blog -> fswy -> models.py

在文章模型下,添加一個瀏覽量增加的函數,方便使用,在視圖類下可以添加一些有必要的小功能,也可以是基礎字段的處理擴展字段

def update_views(self):
    self.views += 1
    self.save(update_fields=['views'])

二、喜歡

喜歡是點擊事件,那麼需要 Jquery 觸發, 根據前端喜歡按鈕標籤屬性去jquery.js文件找到對應代碼

id="Addlike"

blog -> static -> js -> jquery.js

a.fn.postLike = function() {
    if (a(this).hasClass("actived")) {
        return alert("已經點過贊啦!")
    } else {
        a(this).addClass("actived");
        var z = a(this).data("id"),
        y = a(this).data("action"),
        x = a(this).children(".count");

        var w = {
            action: "bigfa_like",
            um_id: z,
            um_action: y
        };
        a.post("/wp-admin/admin-ajax.php", w,
        function(A) {
            a(x).html(A)
        });
        a.tipsBox({
            obj: a(this),
            str: "+1",
            callback: function() {}
        });
        return false
    }
};

可以找到

a.post("/wp-admin/admin-ajax.php", w,
function(A) {
    a(x).html(A)
});

改爲

a.post("/love/", w,
function(A) {
    a(x).html(A)
});

um_id: 即爲文章ID

編寫視圖

from django.views.decorators.csrf import csrf_exempt

@csrf_exempt
def LoveView(request):
    data_id = request.POST.get('um_id', '')
    if data_id:
        article = Article.objects.get(id=data_id)
        article.loves += 1
        article.save()
        return HttpResponse(article.loves)
    else:
        return HttpResponse('error', status=405)

配置路由

# 喜歡
path(r'love/', LoveView, name='love'),

三、訪問路徑

前端請求的路徑其實有很多寫法

方法一

<a target="_blank" href="/article/{{ article.slug }}" title="{{ article.title }}">

方法二

<a target="_blank" href="{% url 'blog:article' article.slug %}" title="{{ article.title }}">

無論方法一還是方法二寫起來其實還是很麻煩,怎麼辦呢?

分析一下發現,這些路徑其實是固定的,變的無非是:文章ID、分類類別等

那麼換個思路能不能讓這些路徑寫在後臺,前端直接根據使用的對象獲取呢?答案肯定是可以的

這裏以文章、分類爲例,其實每個模型都可以添加訪問路徑,自己嘗試

blog -> fswy -> moodels.py

在 Article 模型類下添加

 def get_absolute_url(self):
     return reverse('blog:article', kwargs={'slug': self.slug})

在 Category 模型類下添加

def get_absolute_url(self):
    return reverse('blog:category', kwargs={'slug': self.slug, 'bigslug': self.bigcategory.slug})

前端怎麼使用呢?

原始:

<a target="_blank" href="/article/{{ article.slug }}" title="{{ article.title }}">

改爲:

<a target="_blank" href="{{ article.get_absolute_url }}" title="{{ article.title }}">

是不是很方便,分類、歸檔、標籤等都可以這樣搞

五、總結

可能博客目前還存在細節問題,比如適配手機、給網站添加一個LOGO、等,但是我想還有更多細節或者有意思的功能,就是需要自己去發現處理的,把它當作自己的一個作品好好去打磨一番,會更加完美。接下來我會對自己不滿意的地方進行升級改造。如果發現什麼Bug歡迎在評論區留言

教程目錄

Django3.0+Python3.8+MySQL8.0 個人博客搭建一|前言
Django3.0+Python3.8+MySQL8.0 個人博客搭建二|創建虛擬環境
Django3.0+Python3.8+MySQL8.0 個人博客搭建三|創建博客項目
Django3.0+Python3.8+MySQL8.0 個人博客搭建四|創建第一個APP
Django3.0+Python3.8+MySQL8.0 個人博客搭建五|makemigrations連接MySQL數據庫的坑
Django3.0+Python3.8+MySQL8.0 個人博客搭建六|數據庫結構設計
Django3.0+Python3.8+MySQL8.0 個人博客搭建七|makemigrations創建數據庫的坑(第二彈)
Django3.0+Python3.8+MySQL8.0 個人博客搭建八|通過admin管理後臺
Django3.0+Python3.8+MySQL8.0 個人博客搭建九|博客首頁開發(一)
Django3.0+Python3.8+MySQL8.0 個人博客搭建十|整理項目結構
Django3.0+Python3.8+MySQL8.0 個人博客搭建十一|博客首頁開發(二)
Django3.0+Python3.8+MySQL8.0 個人博客搭建十二|博客首頁開發(三)
Django3.0+Python3.8+MySQL8.0 個人博客搭建十三|博客詳情頁面
Django3.0+Python3.8+MySQL8.0 個人博客搭建十四|註冊登錄
Django3.0+Python3.8+MySQL8.0 個人博客搭建十五|評論區
Django3.0+Python3.8+MySQL8.0 個人博客搭建十六|網站地圖
Django3.0+Python3.8+MySQL8.0 個人博客搭建十七|Haystack 全文搜索

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章