1. 程式人生 > 其它 >使用 django-blog-zinnia 搭建個人部落格

使用 django-blog-zinnia 搭建個人部落格

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

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

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

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

注:本部落格在寫作時每一個步驟均在實際環境下測試了一遍,確保沒有問題。但是由於個人寫作時的疏忽或者計算機環境的差異,也可能會有一些錯誤導致你卡在某個地方無法繼續進行下去。如果是這樣請首先仔細看文中步驟和程式碼,尤其要注意版本相容問題。

1、環境搭建

python 2.7,zinnia 0.16,sqlite3

安裝程式碼:

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple django==1.8.2
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple django-blog-zinnia==0.16
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple markdown
pip install django-app-namespace-template-loader
pip install zinnia-theme-bootstrap
# 如果提示 pip 找不到,請先安裝python包管理器 pip:  https://pip.pypa.io/en/latest/installing/#id7

####如果沒有安裝python包管理器 pip,也可以直接基於原生代碼安裝:
#先下載 https://github.com/Fantomas42/django-blog-zinnia/archive/v0.16.zip
#然後 cd django-blog-zinnia
#最後 python setup.py install

#tips:一些必要的依賴 pip 其會自動幫我們安裝,但是一些拓展依賴需要我們手動安裝,包括:
pip install markdown 安裝 markdown,以便使部落格文章支援 markdown 格式的文字。
pip install pygments 安裝 pygments,以便支援程式碼語法高亮。

#下載安裝 sqlite3
https://sqlite.org/2017/sqlite-dll-win64-x64-3160200.zip

再次提醒,一定要注意版本問題,這個專案涉及到的外掛很多,很容易有系統環境和外掛版本不相容的問題。

2、建立 django 工程

進入你喜歡的目錄,通過命令 python ‪C:Python27Scriptsdjango-admin.py startproject demo 建立一個 django 工程。這裡 demo 是專案名,可以取任何你喜歡的名字。此時你會發現多了一個名為 demo 的目錄,這樣 django 工程就建立好了,目錄結構如下:

C:UsersJunDesktopdemo>tree /F
卷 win8.1 的資料夾 PATH 列表
卷序列號為 C0000100 7E66:869B
C:.
│  manage.py
│
└─demo
        settings.py
        settings.pyc
        urls.py
        urls.pyc
        wsgi.py
        wsgi.pyc
        __init__.py
        __init__.pyc


C:UsersJunDesktopdemo>

3、設定 settings.py 檔案

進入到 demo/demo (當然你可能設定了其他專案名,但我相信你能找到),開啟 settings.py 檔案(用文字編輯器或者 python IDE 開啟,不要直接執行),在 INSTALL_APPS 列表裡新增以下的 APP,這些 APP 都是 django-blog-zinnia 依賴執行的 APP,專案正常執行前我們要先進行一些設定 :

demo/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_bootstrap',
    'zinnia',
]

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

demo/demo/settings.py

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [],
        # 1、這裡 True 改成 False
        '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',
                
                # 2、新增這句
                'zinnia.context_processors.version',  # Optional
            ],
            # 3、新增下面這幾行
            'loaders': [
               'app_namespace.Loader',
               'django.template.loaders.filesystem.Loader',
               'django.template.loaders.app_directories.Loader',
            ],
        },
    },
]

在 ALLOWED_HOSTS = [] 的下面新增 SITE_ID = 1

demo/demo/settings.py

ALLOWED_HOSTS = []

# 新加2行
SITE_ID = 1
ZINNIA_MARKUP_LANGUAGE = 'markdown'

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

demo/demo/settings.py

# + 號表示新增的行,- 號表示刪去的行
- LANGUAGE_CODE = 'en-us'
+ LANGUAGE_CODE = 'zh-hans'

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

整個檔案原始碼如下,僅供參考:

import os

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))


SECRET_KEY = '#+u%&dk@p%yt526^)$o7#*4)w$d)u)s!sytfipfbtb#iohu6ph'

# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = True

ALLOWED_HOSTS = []


# Application definition


INSTALLED_APPS = (
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'django_comments',
    'django.contrib.sites',
    'mptt',
    'tagging',
    'zinnia_bootstrap',
    'zinnia',
)

MIDDLEWARE_CLASSES = (
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
    'django.middleware.security.SecurityMiddleware',
)

ROOT_URLCONF = 'demo.urls'

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [],
        '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',
            ],
        },
    },
]

WSGI_APPLICATION = 'demo.wsgi.application'


DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}


LANGUAGE_CODE = 'zh-hans'
TIME_ZONE = 'Asia/Shanghai'
SITE_ID = 1

USE_I18N = True

USE_L10N = True

USE_TZ = True


STATIC_URL = '/static/'

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

4、設定 urls.py 檔案

開啟相同目錄下的 urls.py 檔案,直接用下面的程式碼替換  demo/demo/urls.py 內容,整個 urls.py 如下:

demo/demo/urls.py

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


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

5、同步資料庫並建立後臺管理員賬戶

在 manage.py 檔案所在目錄下輸入 python manage.py migrate 建立相應的資料庫表結構。此時會看到目錄下多了一個 db.sqlite3 檔案,這是儲存部落格資料的資料庫檔案,預設使用的 sqlite3。輸入命令 python manage.py createsuperuser 建立後臺管理員賬戶,命令列會提示你輸入使用者名稱、郵箱、密碼。注意密碼輸入時不會有任何顯示,只管輸下去就行。

6、啟動 web 伺服器

在 manage.py 檔案所在目錄下輸入 python manage.py runserver 啟動伺服器,在瀏覽器輸入 127.0.0.1:8000/weblog 將看到部落格的首頁面。輸入 127.0.0.1:8000/admin 會進入後臺登入頁面,輸入剛才建立的管理員賬戶使用者名稱和密碼就可以登入到後臺管理介面。在日誌後面點選增加按鈕嘗試著新增一篇部落格看看!再次進入 127.0.0.1:8000/weblog 就可以看到剛才發表的部落格了,至此基本的部落格已經搭建完畢。

7、檢視資料庫及表結構

C:UsersJunDesktopdemo>sqlite3 db.sqlite3
SQLite version 3.11.0 2016-02-15 17:29:24
Enter ".help" for usage hints.
sqlite> .tables
auth_group                  django_session
auth_group_permissions      django_site
auth_permission             tagging_tag
auth_user                   tagging_taggeditem
auth_user_groups            zinnia_category
auth_user_user_permissions  zinnia_entry
django_admin_log            zinnia_entry_authors
django_comment_flags        zinnia_entry_categories
django_comments             zinnia_entry_related
django_content_type         zinnia_entry_sites
django_migrations
sqlite>

另外,可以使用 .dump 或 .schema ,匯出表結構和資料。

8、定製你的部落格

比如你想修改標題,語法高亮、側邊欄的內容等等,就需要修改相應的模板了。

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

在 demo/ 目錄下(與 manage.py 同級)建立如下的目錄結構和檔案:

demo/templates/zinnia/skeleton.html,把這裡面的內容:skeleton 模板程式碼 ,複製到 skeleton.html中,並且在 skeleton.html 中做你想要的修改即可。

再在 zinnia_demo/ 下建立如下的目錄結構和檔案:

demo/theme/static/theme/css/github.css,把這裡面的內容:github.css 樣式程式碼 ,複製到 github.css 檔案中。

開啟 settings.py 檔案,做如下修改:

demo/demo/settings.py

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

將 theme app 註冊到 INSTALLED_APPS 列表中:

demo/demo/settings.py

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

啟動web伺服器,進入相應頁面就可以看到修改後效果了。

Refer:

[1] Installation

http://docs.django-blog-zinnia.com/en/develop/getting-started/install.html

[2] 使用 django-blog-zinnia 搭建個人部落格

https://segmentfault.com/a/1190000006839238

[3] 邊做邊學,Python&Django實戰教程-02本地搭建Django部落格

https://zhuanlan.zhihu.com/mazhifeng

[4] SQLite3查詢表結構

http://blog.csdn.net/guanhuhousheng/article/details/6933209