最近想用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.