1. 程式人生 > >Django開發部落格(七)——markdown優化

Django開發部落格(七)——markdown優化

背景

上一次把markdown整合之後,發現還是有很多問題。這次需要做一些優化。
1、markdown與普通文字的區別顯示。
2、增加點選量的統計
3、新增名片卡的滑動

版本相關
作業系統:Mac OS X EI Caption
Python版本:3.4
Django版本:1.9
IDE:PyCharm

markdown的優化

我試著轉載其他部落格的內容過來,發現非markdown格式的文字轉過來顯示的很醜很醜,幾乎沒辦法看,所以針對這個需要做一些優化。剛好之前資料庫的欄位定義的太少了,趁這個機會擴充一下。在models.py中加幾個欄位上去。

models.py

blog_ismarkdown = models.CharField(max_length=1
, null=True) blog_like = models.IntegerField(null=True) blog_clicknum = models.IntegerField(null=True)

三個欄位,一個用來控制文章格式的分類,是否屬於markdown。like欄位留存,後續做點讚的擴充。clicknum欄位用來處理統計點選量的資料。
擴充的時候需要新增null=True來處理這幾個欄位允許為空,否則無法變更成功。變更成功後再取消這些null。

python manage.py makemigrations grzx
python manage.py sqlmigrate grzx 0004
python manage.py migrate

第二句的0004要根據自己資料庫遷移的版本來定。

思路

新增ismarkdown欄位的意義在於,新增文章的時候,讓別人選擇文章型別是否屬於markdown,如果是,則傳遞一個1到後臺,後臺處理到資料庫中,如果不是,則傳遞一個0到後臺,後臺處理到資料庫。別人點選檢視文章內容時,後臺傳遞文章主體內容到模版,一起傳遞一個markdown標記。模版做一個簡單的判斷,以markdown格式還是普通文字格式來顯示。

檢視函式的處理

根據上面的思路,需要修改的地方有兩個,一個是新增文章的時候儲存這個ismarkdown這個標記。另一個是檢視文章內容的時候返回這個標記,讓模版使用相應的方式來處理。

views.py  sub_article

def sub_article(request):
    cursor = connection.cursor()
    if request.method == 'POST':
        mytype = request.POST['article_type']
        title = request.POST['article_title']
        # body = markdown(request.POST['article_editor'])
        body = request.POST['article_editor']
        markdown = request.POST['article_markdown']
        updb = BlogBody(blog_title=title, blog_ismarkdown=markdown, blog_body=body, blog_type=mytype, blog_timestamp=time.strftime("%Y-%m-%d %X", time.localtime()), blog_author='點點寒彬', blog_clicknum=1, blog_like=0)
        updb.save()
        cursor.execute('select max(id) from grzx_blogbody where blog_type = %s ', [mytype])
        new_id = cursor.fetchone()
        return redirect('/grzx/article/' + str(new_id[0]) + '/')

由於返回給模版的時候,是整條記錄返回回去的,那麼就不用專門來處理,只要在模版層處理就行了。

模版處理

根據上面的思路,模版處理需要處理兩個地方。首先,我們在新增文章的時候需要增加一個文字型別是否為markdown的選擇欄位。程式碼如下:

add_article.html

<form method="post" action="/grzx/sub_article/">
    {% csrf_token %}
    <p>文章標題</p>
    <div>
        <select name="article_type" style="height: 20px; width: 120px;">
            <option value="Python" selected="selected">Python</option>
            <option value="abouttest">測試相關</option>
            <option value="mytalk">個人雜談</option>
            <option value="diary">偶爾能想起來的日記</option>
        </select>
        <input name="article_title" type="text" style="height: 20px;width: 400px;" placeholder="請輸入文章標題">
{#        <input name="article_markdown" type="checkbox" value="1">MarkDown#}
        <select name="article_markdown" style="height: 20px; width: 90px;">
            <option value="1" selected="selected">MarkDown</option>
            <option value="0">普通文字</option>
        </select>
    </div>
    <p>文章內容</p>
    <textarea name="article_editor" rows="55" style="width: 630px;"></textarea>
    <input type="submit" value="提交" style="margin-left: 300px;width: 60px;height: 20px;">
</form>

增加了這個選擇欄位後,每次填寫的時候就會傳遞標記給檢視函式去處理了。再一個需要處理的是view.html。需要做一個簡單的判斷。程式碼如下:

view.html

        <p style="word-wrap: break-word;word-break:break-all;">
            {% if blog_content.blog_ismarkdown == '1' %}
                {{ blog_content.blog_body | custom_markdown }}
            {% elif blog_content.blog_ismarkdown == '0' %}
                {{ blog_content.blog_body }}
            {% endif %}
        </p>

這樣就完成了。跑起來試試看吧。

點選量的統計

思路

這部分就比較簡單了,上文已經把資料庫加好了,現在只要做一個簡單的處理,就是點選的時候在資料庫吧這個欄位的數字加一就好了。當然,我們做了這個處理,模版就要把點選量顯示出來。

檢視函式

這部分很簡單,就直接上程式碼了:

views.py

def article(request, blog_body_id=''):
    """
    處理點選事件,並且點選數加一
    """
    blog_content = BlogBody.objects.get(id=blog_body_id)
    num = blog_content.blog_clicknum
    num += 1
    blog_content.blog_clicknum = num
    blog_content.save()
    return render(request, 'view.html', {'blog_content': blog_content})

模版函式

同樣很簡單,就是展示一個顯示資料,程式碼如下:

view.html

<p class="box">釋出時間:{{ blog_content.blog_timestamp }}<span>作者:{{ blog_content.blog_author }}</span><span>閱讀:{{ blog_content.blog_clicknum }}</span><a href="/">編輯</a> <a href="{% url 'del_article' blog_content.id %}">刪除</a></p>

新增名片的滑動跟隨

這部分使用的是一個CSS的屬性,就是把這個盒子層次擺放到第一位。程式碼如下:

       <div class="card" style="width: 280px;position: fixed;z-index: 1;">
            <h1>About Me</h1>
            <p>網名:Sven Weng | 點點寒彬</p>
            <p>職業:測試工程師</p>
            <p>公司:華林證券</p>
            <p>Email:[email protected]</p>
          <ul class="linkmore">
            <li><a href="/grzx/add_article" class="talk" title="給我留言"></a></li>
            <li><a href="/" class="address" title="聯絡地址"></a></li>
            <li><a href="/" class="email" title="給我寫信"></a></li>
            <li><a href="/" class="photos" title="生活照片"></a></li>
    {#        <li><a href="/" class="heart" title="關注我"></a></li>#}
          </ul>
        </div>

就是在style中增加一個z-index:1;這個css屬性。

後記

再怎麼說,一個部落格也已經搭建完畢了,剩下的功能都需要一點一點的去細化和慢慢的經營。最後的一步,把它部署上去。