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