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