使用 django-blog-zinnia 搭建個人博客

目前網上搭建個人博客的方案很多,雖然使用諸如 Wordpress ( PHP )、Hexo ( Node.js ) 等可以方便快速地搭建一款功能齊全的高性能個人博客,但是本文將嘗試一種更為小眾化的方案 —— 一款基于 django-blog-zinnia ( Python ) 的個人博客應用。

django-blog-zinnia 雖然小巧,但是具備了個人博客應用的全部基礎功能,且具有很高的拓展性,并且開箱即用。以下是官方列出的一些特性:

  • 評論
  • 站點地圖(用于搜索引擎優化)
  • 文章歸檔視圖(自動按時間歸檔博文,包括年、月、星期、日各個時間維度)
  • RSS 或者 Atom Feed
  • 分類和標簽云
  • 全文搜索
  • Markdown 語法標記

等等其他一些博客應用具備的全部基本功能。

你可以參照它的官方文檔 ( django-blog-zinnia documentation ) 的 installation 部分進行初始的安裝,但本文也會給出詳細的安裝教程,并對相關的細節進行進一步補充,對功能進行進一步地拓展設置。

注:本博客在寫作時每一個步驟均在實際環境下測試了一遍,基本確保沒有問題。但是由于個人寫作時的疏忽或者計算機環境的差異,也可能會有一些錯誤導致你卡在某個地方無法繼續進行下去。如果是這樣請給我留言,我和你一起排查問題,如果發現是博客寫作時的錯誤也好使我盡快更正。

建立虛擬環境

因為在安裝 django-blog-zinnia 的過程中會安裝很多其他第三方依賴包,因此強烈建議使用虛擬環境安裝,以免把系統環境弄亂。

假設你的 python 版本是 3.4 或更高(建議使用 3.4 以上版本,當然 django-blog-zinnia 本身是兼容 python2.7 及以上版本的),且已經安裝了虛擬環境管理工具 virtualenv,如果沒有的話通過 pip install virtualenv 安裝。打開命令行,進入到你想建立虛擬環境的目錄,通過命令 virtualenv zinnia_demo_env 創建一個名為 zinnia_demo_env 的虛擬環境,當然 zinnia_demo_env 這個目錄名你可以任意指定。進入到創建的虛擬環境的 Scripts 目錄下,輸入 activate 命令激活虛擬環境,此時命令行前多了一個 ( zinnia_demo_env ) 說明已經激活,例如我的是:

(zinnia_demo_env) D:\Users\zmrenwu\Envs\zinnia_demo_env\Scripts>

通過 pip install django==1.9.6 安裝 django,建議使用 1.9.6 版本,當然 >=1.9 的版本都是兼容的,但注意目前不兼容 django1.10。

建立 django 工程

進入你喜歡的目錄(確保依然在虛擬環境中,如果沒有則按照上面的方法重新開啟,且下邊的操作默認都在虛擬環境中運行,因此不要退出),通過命令 python django-admin.py startproject zinnia_demo 創建一個 django 工程。這里 zinnia_demo 是項目名,可以取任何你喜歡的名字。此時你會發現多了一個名為 zinnia_demo 的目錄,這樣 django 工程就建立好了。進入到這個目錄,會看到有一個 manage.py 文件,嘗試運行命令 python manage.py runserver,不報錯的話,在瀏覽器輸入 127.0.0.1:8000,看到如下字樣說明 django 工程已經可以正確運行。

It worked!

Congratulations on your first Django-powered page.

Of course, you haven't actually done any work yet. Next, start your first app by running python manage.py startapp [app_label].

You're seeing this message because you have DEBUG = True in your Django settings file and you haven't configured any URLs. Get to work!

按 Ctrl + c 退出服務器。

安裝 zinnia 及其依賴

在虛擬環境中輸入 pip install django-blog-zinnia 安裝 django-blog-zinnia,必要的依賴其會自動幫我們安裝,但是一些拓展依賴需要我們手動安裝,包括:

pip install markdown 安裝 markdown,以便使博客文章支持 markdown 格式的文本。

pip install pygments 安裝 pygments,以便支持代碼語法高亮。

設置 settings.py 文件

進入到 zinnia_demo/zinnia_demo (當然你可能設置了其他項目名,但我相信你能找到),打開 settings.py 文件(用文本編輯器或者 python IDE 打開,不要直接運行),在 INSTALL_APPS 列表里添加以下的 APP,這些 APP 都是 django-blog-zinnia 依賴運行的 APP :

zinnia_demo/zinnia_demo/settings.py

INSTALLED_APPS = [
    # 工程建立時默認添加的app
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    
    # 項目添加的app
    'django.contrib.sites',
    'django_comments',
    'mptt',
    'tagging',
    'zinnia',
]

在 TEMPLATES 列表的如下位置加入 zinnia.context_processors.version ,當然這一步是可選的,其作用只是在博客頁面的底部顯示一個django-blog-zinnia 的版本號:

zinnia_demo/zinnia_demo/settings.py

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
                
                # 添加這句
                'zinnia.context_processors.version',  # Optional
            ],
        },
    },
]

在 ALLOWED_HOSTS = [] 的下面添加 SITE_ID = 1

zinnia_demo/zinnia_demo/settings.py

ALLOWED_HOSTS = []
SITE_ID = 1

并修改語言和時區,獲得更友善的語言和時間顯示,注意 + 號表示添加的行,- 號表示刪去的行:

zinnia_demo/zinnia_demo/settings.py

- LANGUAGE_CODE = 'en-us'
+ LANGUAGE_CODE = 'zh-hans'

- TIME_ZONE = 'UTC'
+ TIME_ZONE = 'Asia/Shanghai'

設置 urls.py 文件

打開相同目錄下的 urls.py 文件,做如下修改,注意 + 號表示添加的行,- 號表示刪去的行:

zinnia_demo/zinnia_demo/urls.py

- from django.conf.urls import url
+ from django.conf.urls import url,include
from django.contrib import admin

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    + url(r'^weblog/', include('zinnia.urls')),
    + url(r'^comments/', include('django_comments.urls')),
]

同步數據庫并創建后臺管理員賬戶

在 manage.py 文件所在目錄下輸入 python manage.py migrate 建立相應的數據庫表結構。此時會看到目錄下多了一個 db.sqlite 文件,這是存儲博客數據的數據庫文件,默認使用的 sqlite3。輸入命令 python manage.py createsuperuser 創建后臺管理員賬戶,命令行會提示你輸入用戶名、郵箱、密碼。注意密碼輸入時不會有任何顯示,只管輸下去就行。

開啟開發服務器

再次運行 python manage.py runserver 開啟開發服務器,在瀏覽器輸入 127.0.0.1:8000/weblog 將看到博客的首頁面。輸入 127.0.0.1:8000/admin 會進入后臺登錄頁面,輸入剛才創建的管理員賬戶用戶名和密碼就可以登錄到后臺管理界面。在日志后面點擊增加按鈕嘗試著添加一篇博客看看!再次進入 127.0.0.1:8000/weblog 就可以看到剛才發表的博客了。

django-zinnia-blog homepage

至此基本的博客已經搭建完畢,接下來是一些可選功能拓展,包括 markdown 語法支持,代碼高亮,bootstrap 主題的安裝。

( OPTIONAL ) Markdown 語法支持

再次打開 settings.py 文件,在文件的最后添加:

zinnia_demo/zinnia_demo/settings.py

...
ZINNIA_MARKUP_LANGUAGE = 'markdown'
ZINNIA_MARKDOWN_EXTENSIONS = ['markdown.extensions.extra', 'markdown.extensions.codehilite']

bingo!!

ZINNIA_MARKUP_LANGUAGE 指明了使用 markdown 語法標記,ZINNIA_MARKDOWN_EXTENSIONS 做了兩個拓展,其中 markdown.extensions.codehilite 表示支持語法高亮,markdown.extensions.extra 包含的特性請參見 markdown 相關文檔。

( OPTIONAL ) 安裝 Bootstrap 主題

如果你不喜歡原生的主題的話,django-blog-zinnia 為我們提供了一套 bootstrap 主題,相對來說更加好看一點。雖然說實在話內置的主題感覺都已經過時了,因此我重新為它設置了一套全新的主題,稍后會有介紹。

中斷服務器的運行,進入到虛擬環境(如果你已經退出了的話),首先輸入命令 pip install django-app-namespace-template-loader 安裝 django-app-namespace-template-loader,這是替換主題的一個必要組件。再輸入 pip install zinnia-theme-bootstrap 安裝主題 APP ,打開 settings.py 文件,在 INSTALLED_APPS 中注冊主題 APP ,注意主題 zinnia_bootstrap 一定要在 zinnia 之前:

zinnia_demo/zinnia_demo/settings.py

INSTALLED_APPS = [
    ...
    'zinnia_bootstrap',
    'zinnia',
]

再將 TEMPLATES 列表做如下修改:

zinnia_demo/zinnia_demo/settings.py

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [],
        - 'APP_DIRS': True,
        + 'APP_DIRS': False,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
                'zinnia.context_processors.version',  # Optional
            ],
            
            # 添加下面這幾行
            'loaders': [
               'app_namespace.Loader',
               'django.template.loaders.filesystem.Loader',
               'django.template.loaders.app_directories.Loader',
            ],
            # 添加上面幾行
        },
    },
]

此時再次開啟服務器,進入主頁 127.0.0.1:8000/weblog 就可以看到主題變成了 bootstrap 樣式了。

( OPTIONAL ) 語法高亮支持

注意:這一步必須在安裝完 bootstrap 主題之后。

pygments 已經幫我做好了一切語法高亮的準備,其原理就是把 html 中的代碼文本分成很多塊,用適當的 html 標簽包裹,并且添加相應的 css 類,我們只需引入一個相應的 css 樣式文件即可。

為了方便起見,我們新建一個 APP 來存放我的需要引入的 css 樣式文件,在 zinnia_demo/ 目錄下(與 manage.py 同級)下輸入 python manage.py startapp theme,這樣我們就創建了一個名為 theme 的 app,可以看到 zinnia_demo/ 多了一個 theme 的文件夾。

在 zinnia_demo/ 目錄下(與 manage.py 同級)建立如下的目錄結構和文件:

zinnia_demo/templates/zinnia/skeleton.html,把這里面的內容:skeleton 模板代碼 ,復制到 skeleton.html中,并且在 skeleton.html 的 <head> 標簽里添加一行:

zinnia_demo/templates/zinnia/skeleton.html

<link rel="stylesheet" href="{% static "theme/css/github.css" %}" />

再在 zinnia_demo/ 下建立如下的目錄結構和文件:

zinnia_demo/theme/static/theme/css/github.css,把這里面的內容:github.css 樣式代碼 ,復制到 github.css 文件中。

打開 settings.py 文件,做如下修改:

zinnia_demo/zinnia_demo/settings.py

TEMPLATES = [
    {
        ...
        # 修改成下面的樣子,作用是指明模板文件所在目錄,即上面我們寫的skeleton.html
        'DIRS': [os.path.join(BASE_DIR, 'templates')],
        ...
    }
]

將 theme app 注冊到 INSTALLED_APPS 列表中:

zinnia_demo/zinnia_demo/settings.py

INSTALLED_APPS = [
    ...
    'theme',
    'zinnia_bootstrap',
    'zinnia',
]

打開開發服務器,進入相應頁面就可以看到代碼高亮效果了。記得事先填充一些代碼到博客文章中。

我的拓展項目

考慮到自帶的主題讓人略微有些不滿意(因為我本人更加喜歡簡約一些的),所以自己替換了一套新的主題,你可以先預覽一下效果:追夢人物的個人博客,做一個對比。由于目前還沒有做成插件,因此如果感興趣的話可以 follow 我 GitHub 上的項目:ZinniaBlog 。首頁的 readme.md 文件已經給出詳細的本地安裝和服務器部署過程,可供參考。我會嘗試著不斷維護添加一些拓展的功能進去(目前只是替換了一套主題模板)。如果你有想添加新的功能可以嘗試著參考官方文檔自己添加,或者給我留言,我可能會采納。

結束

PS:

自帶的評論功能當有人回復你發表的博客文章后會發送一封 email 給你的后臺管理員賬戶郵箱(創建后臺管理員賬戶填寫的)。不過需要設置好發送郵件的郵箱,參考配置如下,在 settings.py 中:

zinnia_demo/zinnia_demo/settings.py

EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'smtp.163.com' # 如果不是163郵箱請替換為郵箱服務商的smtp服務器地址
EMAIL_PORT = 465
EMAIL_HOST_USER = '你的郵箱賬號'  # add your own accounts for local test
EMAIL_HOST_PASSWORD = '你的郵箱密碼'
EMAIL_USE_SSL = True
DEFAULT_FROM_EMAIL = EMAIL_HOST_USER

不過要確保你的郵箱開啟了 SMTP,如果沒有的話請參考郵箱服務商的相關設置進行開啟。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,488評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,034評論 3 414
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,327評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,554評論 1 307
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,337評論 6 404
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,883評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 42,975評論 3 439
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,114評論 0 286
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,625評論 1 332
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,555評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,737評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,244評論 5 355
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 43,973評論 3 345
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,362評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,615評論 1 280
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,343評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,699評論 2 370

推薦閱讀更多精彩內容