Django CMS學習

最近想用Django-shop做個網店,哪知道遇到坑。回過頭來仔細看看CMS框架。沒見到相關的資料,實在不能忍,自己翻譯一下。

注意,這篇教程是針對想在自己Django項目加入DjangoCMS的。以及手動安裝詳細了解CMS配置過程的。沒有這個想法的請繞過

一、怎么手動安裝 CMS

最簡單安裝CMS的方法是用DjangoCMS自己的安裝器,推薦用這種方式來開始一個工程,其他教程就是用這種方式安裝

如果你偏愛手動安裝,那么你來對地方了,這篇文章帶你走這段旅程

Note

如果你想把CMS作為你自己項目的一部分,這個教程能夠提供這方面的幫助。當然是有條件的,你的項目必須是空項目。你只要緊跟教程的步伐,你就可以達到目的


讀這篇教程你最好了解Python和Django,一旦你把CMS集成到你自己項目中了,那么你就可以在CMS中開發了

Install the django CMS package

首先檢查一下你安裝的CMS要求的Python和Django的版本。這很重要

CMS其他依賴都在都在Setup.py文件里了

Important

強烈建議用虛擬環境來安裝CMS,如何創建激活和處置虛擬環境,請自行百度。如果不會,getstarted文檔有個簡單的介紹,不過建議學點虛擬環境的基本用法。

virtualenv django-cms-site? # create a virtualenv

創建虛擬環境

source django-cms-site/bin/activate? # activate it

激活命令

In an activated virtualenv, run:

在激活的虛擬環境里輸入命令

pip install --upgrade pip

最好把pip升級到最終版本,這樣子可以減少一些依賴

Then:

pip install django-cms

安裝最新版的CMS


django-admin.py startproject myproject

創建一個工程

如果你沒見過這個命令,請移步Django的教程,要不你會跟不上節奏

myproject

? ? myproject

? ? ? ? __init__.py

? ? ? ? settings.py

? ? ? ? urls.py

? ? ? ? wsgi.py

? ? manage.py


應用和設置中最小的要求


在編輯器中打開工程目錄中的setting.py

INSTALLED_APPS

在INSTALLED_APPS域添加下面的app

'django.contrib.sites',

'cms',

'menus',

'treebeard',

CMS 會用django.contrib.sites 這個framework. 要設置一下SITE_ID = 1

cms and menus 是CMS的核心模塊

django-treebeard 是Django的包,用來管理CMS的頁面和樹構架

django CMS 安裝 django CMS 管理風格. 這個風格作用是管理頁面里面的各個組件愉快合作。從技術上來講,這是個可選組件,你的工程可能不需要,不過強烈推薦

在 INSTALLED_APPS里, 在django.contrib.admin的前面增加:

'djangocms_admin_style',

語言設置

django CMS要求你設置語言,并且列出你項目可能用到的各種語言,填寫位置在LANGUAGE_CODE.

一個實例,結構是list里面的tuple

LANGUAGES = [

? ? ('en', 'English'),

? ? ('de', 'German'),

]

這里注意一點,設置的en是en-us的簡寫)

數據庫

django CMS需要后臺數據庫的支持。你可用Python自帶的SQlite數據庫,省去安裝和設置的麻煩。正常情況下,一個產品是不會用SQlite的,但是對開發階段就是個理想的選擇,因為Django已經為你設置好了一切。


Note

在部屬階段,你最好用PostgreSQL或者MySql,為了產品的發布做準備。我們這里不討論安裝和運營數據庫,其他專門網站會詳細介紹。不管你用什么數據庫,都需要安裝相應的python接口。例如

pip install psycopg2? ? # for Postgres

pip install mysqlclient? # for MySQL

如果你想用自己喜歡的數據庫,你可以去參考Django相關的文檔,來正確配置數據庫

數據庫表

用migrate命令來為新的應用創建數據庫表

python manage.py migrate

管理員用戶名

創建超級用戶的命令:

python manage.py createsuperuser


用CMS check命令來檢查配置情況

完成最低的配置要求后,你可以用CMS check命令來確認一下你的配置是否正確,順便也可能安裝一下必須的組件

python manage.py cms check

這個命令檢查你的設置,應用和數據庫配置情況,并且給你一份體檢報告。

Note

如果你缺少關鍵部件,這個命令將直接報錯,不會運行下去。

按照教程走下來,運行cms check命令,來確認一下你的配置沒有問題

Sekizai

在CMS中,Django Sekizai是用來管理靜態文件的。在INSTALLED_APP配置中加入'sekizai'這個應用,并且在TEMPLATES['OPTIONS']中這么加入

TEMPLATES = [

? ? {

? ? ? ? ...

? ? ? ? 'OPTIONS': {

? ? ? ? ? ? 'context_processors': [

? ? ? ? ? ? ? ? ...

? ? ? ? ? ? ? ? 'sekizai.context_processors.sekizai',

? ? ? ? ? ? ],

? ? ? ? },

? ? },

]

管道

在你的項目配置文件 MIDDLEWARE_CLASSES 中你需要加入django.middleware.locale.LocaleMiddleware 。在Django中,默認是沒有加入的。還要把下面也加入到列表中

'cms.middleware.user.CurrentUserMiddleware',

'cms.middleware.page.CurrentPageMiddleware',

'cms.middleware.toolbar.ToolbarMiddleware',

'cms.middleware.language.LanguageCookieMiddleware',

你也可以加入'cms.middleware.utils.ApphookReloadMiddleware'.雖然他不是必須的,但是它很有用,如果你要加入,記住一定要把它加入的列表的最開始。

環境變量處理器

把這個環境變量'cms.context_processors.cms_settings' 加入到TEMPLATES['OPTIONS']['context_processors'].中

因為缺少一些設置,現在你會發現cms check并不能確認我們工程中的問題。下面就是需要進一步配置的地方

URLs

在你的工程文件urls.py中加入 url(r'^', include('cms.urls')) . 記得把它加到列表中的前面,以保證應用的鏈接配置能首先被發現。

from django.conf.urls import url, include

urlpatterns = [

? ? url(r'^admin/', admin.site.urls),

? ? url(r'^', include('cms.urls')),

]

好了,目前為止我們可以在項目根目錄中運行 python manage.py runserver. 瀏覽器訪問 http://localhost:8000/, 或者進管理 http://localhost:8000/admin/. 當然你現在其實干不了什么有意義的事

模板

django CMS至少需要一個模板來展現他的頁面,默認模板在項目的 CMS_TEMPLATES list 里。

CMS_TEMPLATES = [

? ? ('home.html', 'Home page template'),

]

在你工程的根目錄,新建一個templates文件夾,在里面新建一個home.html文件,內容如下

{% load cms_tags sekizai_tags %}

<html>

? ? <head>

? ? ? ? <title>{% page_attribute "page_title" %}</title>

? ? ? ? {% render_block "css" %}

? ? </head>

? ? <body>

? ? ? ? {% cms_toolbar %}

? ? ? ? {% placeholder "content" %}

? ? ? ? {% render_block "js" %}

? ? </body>

</html>

我們來詳細了解一下上面代碼

{% load cms_tags sekizai_tags %}這是加載我們在這個模板中要用到的模板標簽庫

{% page_attribute "page_title" %}這是獲取頁面的page_title的屬性值

{% render_block "css" %} and {% render_block "js" %} 這兩個是 Sekizai 模板標簽。他們加載了Django應用中定義好了的HTML區域塊,而DjangoCMS則定義了這些區域塊的css和js,所以我們需要這些標簽。 我們建議把{% render_block "css" %} 放在 </head> 的前面, 把{% render_block "js" %} 放在 </body>的前面.當然你也可以隨意放。

{% cms_toolbar %} 這個標簽是為了呈現CMS工具欄。

{% placeholder "content" %} 定義了一個占位符。這個地方就是插件插入的地方。一個模板至少需要一個{% placeholder %}模板標簽, 好來插入CMS. 這個content的名字僅僅是描述性的名稱。方便引用。

好了,Django 怎么知道我們模板在哪里呢?我們需要把模板路徑加入到模板中 。

TEMPLATES = [

? ? {

? ? ? ? ...

? ? ? ? 'DIRS': ['templates'],

? ? ? ? ...

? ? },

]

Note

當然這個方式是為了演示用,真正的項目中,我們一般會創建一個base.html來給項目中所有應用提供一個根模板,其他應用只需要繼承擴展它就好了。擴展根模板這塊內容可以在Django中找到,有興趣可以去了解一下。

處理媒體和靜態文件

一個django CMS 站點 必須處理靜態文件,這是一個應用或者項目的核心部分。靜態文件包括圖片,css ,js等

媒體文件是用戶或者應用上傳上來的文件

STATIC_URL 默認被定義為 (as "/static/") ,一個在項目設置中有體現。STATIC_ROOT, 這是靜態文件被拷貝到或者獲取自那里的地方,是到產品開發階段的事情。現在你只需要runserver并且設置DEBUG=TRUE就可以了,其他不用關心。

但是對MEDIA_URL (獲取媒體文件的地方) and MEDIA_ROOT (媒體文件存檔的目錄) 需要你在設置里設置

MEDIA_URL = "/media/"

MEDIA_ROOT = os.path.join(BASE_DIR, "media")

在部屬的時候,你要設置合適媒體文件獲取的路徑,開發階段,在urls.py中設置一下就好了

from django.conf import settings

from django.conf.urls.static import static

urlpatterns = [

? ? ...

] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)


加入處理內容的功能

我們前面僅僅是為CMS站點做了基本的設置,這樣子就可以管理和提供網頁服務了。但是到目前為止我們沒有安裝任何的插件!這就意味這我們沒辦法處理頁面中的內容。所有的內容都是靠插件來管理的。所以我們需要需要安裝一些插件應用來提供內容編輯的功能。

下面列出的插件提供了核心功能。強烈推薦

Django Filer

這個插件是用來管理文件和圖片的。許多應用都依賴它。在一個CMS站點不用Filer幾乎見不到。關于它的詳細介紹請查閱相關文檔,我們這里只是簡單介紹。

安裝

pip install django-filer

很多應用作為依賴安裝了。

Easy Thumnails是創建圖片縮略圖的Django MPTT是為Filer提供文件夾結構的。

Pillow是python著名的圖像庫,他需要很多系統級別的依賴。好了,安裝完畢以后記得添加到INSTALLED_APP里面

'filer',

'easy_thumbnails',

'mptt',

還需要添加一些環境變量

THUMBNAIL_HIGH_RESOLUTION = True

THUMBNAIL_PROCESSORS = (

? ? 'easy_thumbnails.processors.colorspace',

? ? 'easy_thumbnails.processors.autocrop',

? ? 'filer.thumbnail_processors.scale_and_crop_with_subject_location',

? ? 'easy_thumbnails.processors.filters'

)

接下來要為 Django Filer and Easy Thumbnails,初始化數據庫

python manage.py migrate filer

python manage.py migrate easy_thumbnails

(or simply, python manage.py migrate).

Django CMS CKEditor

這個是CMS默認的文本編輯器

Install: pip install djangocms-text-ckeditor.

把 djangocms_text_ckeditor 加入到INSTALLED_APPS.

Run migrations:

python manage.py migrate djangocms_text_ckeditor

Miscellaneous plugins

還有大量的插件提供各式各樣的功能。所以剛開始我們最好用那些維護好的,提供通用內容管理的插件。例如

djangocms-link

djangocms-file

djangocms-picture

djangocms-video

djangocms-googlemap

djangocms-snippet

djangocms-style

djangocms-column

安裝

pip install djangocms-link djangocms-file djangocms-picture djangocms-video djangocms-googlemap djangocms-snippet djangocms-style djangocms-column

加入

'djangocms_link',

'djangocms_file',

'djangocms_picture',

'djangocms_video',

'djangocms_googlemap',

'djangocms_snippet',

'djangocms_style',

'djangocms_column',

到INSTALLED_APPS中。

Then run migrations:

python manage.py migrate.

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

推薦閱讀更多精彩內容