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阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342

推荐阅读更多精彩内容