Django CMS學習

最近想用Django-shop做個網(wǎng)店神得,哪知道遇到坑⊥捣拢回過頭來仔細看看CMS框架循头。沒見到相關(guān)的資料,實在不能忍炎疆,自己翻譯一下。

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

一缝左、怎么手動安裝 CMS

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

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

Note

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


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

Install the django CMS package

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

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

Important

強烈建議用虛擬環(huán)境來安裝CMS盔性,如何創(chuàng)建激活和處置虛擬環(huán)境霞丧,請自行百度。如果不會冕香,getstarted文檔有個簡單的介紹蛹尝,不過建議學點虛擬環(huán)境的基本用法。

virtualenv django-cms-site? # create a virtualenv

創(chuàng)建虛擬環(huán)境

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

激活命令

In an activated virtualenv, run:

在激活的虛擬環(huán)境里輸入命令

pip install --upgrade pip

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

Then:

pip install django-cms

安裝最新版的CMS


django-admin.py startproject myproject

創(chuàng)建一個工程

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

myproject

? ? myproject

? ? ? ? __init__.py

? ? ? ? settings.py

? ? ? ? urls.py

? ? ? ? wsgi.py

? ? manage.py


應(yīng)用和設(shè)置中最小的要求


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

INSTALLED_APPS

在INSTALLED_APPS域添加下面的app

'django.contrib.sites',

'cms',

'menus',

'treebeard',

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

cms and menus 是CMS的核心模塊

django-treebeard 是Django的包焕襟,用來管理CMS的頁面和樹構(gòu)架

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

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

'djangocms_admin_style',

語言設(shè)置

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

一個實例饵骨,結(jié)構(gòu)是list里面的tuple

LANGUAGES = [

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

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

]

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

數(shù)據(jù)庫

django CMS需要后臺數(shù)據(jù)庫的支持茫打。你可用Python自帶的SQlite數(shù)據(jù)庫居触,省去安裝和設(shè)置的麻煩。正常情況下老赤,一個產(chǎn)品是不會用SQlite的轮洋,但是對開發(fā)階段就是個理想的選擇,因為Django已經(jīng)為你設(shè)置好了一切抬旺。


Note

在部屬階段弊予,你最好用PostgreSQL或者MySql,為了產(chǎn)品的發(fā)布做準備开财。我們這里不討論安裝和運營數(shù)據(jù)庫汉柒,其他專門網(wǎng)站會詳細介紹。不管你用什么數(shù)據(jù)庫责鳍,都需要安裝相應(yīng)的python接口碾褂。例如

pip install psycopg2? ? # for Postgres

pip install mysqlclient? # for MySQL

如果你想用自己喜歡的數(shù)據(jù)庫,你可以去參考Django相關(guān)的文檔历葛,來正確配置數(shù)據(jù)庫

數(shù)據(jù)庫表

用migrate命令來為新的應(yīng)用創(chuàng)建數(shù)據(jù)庫表

python manage.py migrate

管理員用戶名

創(chuàng)建超級用戶的命令:

python manage.py createsuperuser


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

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

python manage.py cms check

這個命令檢查你的設(shè)置,應(yīng)用和數(shù)據(jù)庫配置情況传货,并且給你一份體檢報告屎鳍。

Note

如果你缺少關(guān)鍵部件,這個命令將直接報錯问裕,不會運行下去逮壁。

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

Sekizai

在CMS中窥淆,Django Sekizai是用來管理靜態(tài)文件的。在INSTALLED_APP配置中加入'sekizai'這個應(yīng)用巍杈,并且在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'.雖然他不是必須的词裤,但是它很有用,如果你要加入鳖宾,記住一定要把它加入的列表的最開始吼砂。

環(huán)境變量處理器

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

因為缺少一些設(shè)置,現(xiàn)在你會發(fā)現(xiàn)cms check并不能確認我們工程中的問題鼎文。下面就是需要進一步配置的地方

URLs

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

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/. 當然你現(xiàn)在其實干不了什么有意義的事

模板

django CMS至少需要一個模板來展現(xiàn)他的頁面周偎,默認模板在項目的 CMS_TEMPLATES list 里。

CMS_TEMPLATES = [

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

]

在你工程的根目錄撑帖,新建一個templates文件夾蓉坎,在里面新建一個home.html文件,內(nèi)容如下

{% 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應(yīng)用中定義好了的HTML區(qū)域塊袍嬉,而DjangoCMS則定義了這些區(qū)域塊的css和js,所以我們需要這些標簽灶平。 我們建議把{% render_block "css" %} 放在 </head> 的前面, 把{% render_block "js" %} 放在 </body>的前面.當然你也可以隨意放。

{% cms_toolbar %} 這個標簽是為了呈現(xiàn)CMS工具欄箍土。

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

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

TEMPLATES = [

? ? {

? ? ? ? ...

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

? ? ? ? ...

? ? },

]

Note

當然這個方式是為了演示用,真正的項目中禀横,我們一般會創(chuàng)建一個base.html來給項目中所有應(yīng)用提供一個根模板屁药,其他應(yīng)用只需要繼承擴展它就好了。擴展根模板這塊內(nèi)容可以在Django中找到柏锄,有興趣可以去了解一下酿箭。

處理媒體和靜態(tài)文件

一個django CMS 站點 必須處理靜態(tài)文件,這是一個應(yīng)用或者項目的核心部分趾娃。靜態(tài)文件包括圖片缭嫡,css ,js等

媒體文件是用戶或者應(yīng)用上傳上來的文件

STATIC_URL 默認被定義為 (as "/static/") 抬闷,一個在項目設(shè)置中有體現(xiàn)妇蛀。STATIC_ROOT, 這是靜態(tài)文件被拷貝到或者獲取自那里的地方,是到產(chǎn)品開發(fā)階段的事情◇猿桑現(xiàn)在你只需要runserver并且設(shè)置DEBUG=TRUE就可以了评架,其他不用關(guān)心。

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

MEDIA_URL = "/media/"

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

在部屬的時候疹启,你要設(shè)置合適媒體文件獲取的路徑古程,開發(fā)階段,在urls.py中設(shè)置一下就好了

from django.conf import settings

from django.conf.urls.static import static

urlpatterns = [

? ? ...

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


加入處理內(nèi)容的功能

我們前面僅僅是為CMS站點做了基本的設(shè)置喊崖,這樣子就可以管理和提供網(wǎng)頁服務(wù)了挣磨。但是到目前為止我們沒有安裝任何的插件!這就意味這我們沒辦法處理頁面中的內(nèi)容荤懂。所有的內(nèi)容都是靠插件來管理的茁裙。所以我們需要需要安裝一些插件應(yīng)用來提供內(nèi)容編輯的功能。

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

Django Filer

這個插件是用來管理文件和圖片的晤锥。許多應(yīng)用都依賴它。在一個CMS站點不用Filer幾乎見不到廊宪。關(guān)于它的詳細介紹請查閱相關(guān)文檔矾瘾,我們這里只是簡單介紹。

安裝

pip install django-filer

很多應(yīng)用作為依賴安裝了箭启。

Easy Thumnails是創(chuàng)建圖片縮略圖的Django MPTT是為Filer提供文件夾結(jié)構(gòu)的壕翩。

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

'filer',

'easy_thumbnails',

'mptt',

還需要添加一些環(huán)境變量

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,初始化數(shù)據(jù)庫

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

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

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.

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市宅倒,隨后出現(xiàn)的幾起案子攘宙,更是在濱河造成了極大的恐慌,老刑警劉巖唉堪,帶你破解...
    沈念sama閱讀 217,185評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件模聋,死亡現(xiàn)場離奇詭異,居然都是意外死亡唠亚,警方通過查閱死者的電腦和手機链方,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評論 3 393
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來灶搜,“玉大人祟蚀,你說我怎么就攤上這事「盥簦” “怎么了前酿?”我有些...
    開封第一講書人閱讀 163,524評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長鹏溯。 經(jīng)常有香客問我罢维,道長,這世上最難降的妖魔是什么丙挽? 我笑而不...
    開封第一講書人閱讀 58,339評論 1 293
  • 正文 為了忘掉前任肺孵,我火速辦了婚禮,結(jié)果婚禮上颜阐,老公的妹妹穿的比我還像新娘平窘。我一直安慰自己,他們只是感情好凳怨,可當我...
    茶點故事閱讀 67,387評論 6 391
  • 文/花漫 我一把揭開白布瑰艘。 她就那樣靜靜地躺著,像睡著了一般肤舞。 火紅的嫁衣襯著肌膚如雪紫新。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,287評論 1 301
  • 那天李剖,我揣著相機與錄音弊琴,去河邊找鬼。 笑死杖爽,一個胖子當著我的面吹牛敲董,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播慰安,決...
    沈念sama閱讀 40,130評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼腋寨,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了化焕?” 一聲冷哼從身側(cè)響起萄窜,我...
    開封第一講書人閱讀 38,985評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎撒桨,沒想到半個月后查刻,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,420評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡凤类,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,617評論 3 334
  • 正文 我和宋清朗相戀三年穗泵,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片谜疤。...
    茶點故事閱讀 39,779評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡佃延,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出夷磕,到底是詐尸還是另有隱情履肃,我是刑警寧澤,帶...
    沈念sama閱讀 35,477評論 5 345
  • 正文 年R本政府宣布坐桩,位于F島的核電站尺棋,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏绵跷。R本人自食惡果不足惜膘螟,卻給世界環(huán)境...
    茶點故事閱讀 41,088評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望抖坪。 院中可真熱鬧萍鲸,春花似錦、人聲如沸擦俐。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蚯瞧。三九已至嘿期,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間埋合,已是汗流浹背备徐。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留甚颂,地道東北人蜜猾。 一個月前我還...
    沈念sama閱讀 47,876評論 2 370
  • 正文 我出身青樓秀菱,卻偏偏與公主長得像,于是被迫代替她去往敵國和親蹭睡。 傳聞我的和親對象是個殘疾皇子衍菱,可洞房花燭夜當晚...
    茶點故事閱讀 44,700評論 2 354

推薦閱讀更多精彩內(nèi)容