Hello!

django + django-cms 开发实战-配置

2013-03-01  |  django django-cms python 

因为从window主机环境换到VPS,把手上的站点都移到linux主机下,这时需要一个CMS来管理手上的这些老站点。首先想到了django。于是有了这篇实战记录。

需求

  • 需要支持单页面管理:django-cms的page很强大,基本没有问题;
  • 支持产品添加管理,显示产品列表及单品;
  • 产品支持搜索等功能;
  • 有图片及文件管理功能。

看来只需要做一个简单的产品管理就可以了。

安装

django与django+cms,及所需要的APP的安装:

  • django 1.4
  • django-cms 2.3.5
  • tinymce 1.5.1b4
  • django-filebrowser-no-grappelli-django14
  • easy-thumbnails 1.2

每个项目本身也会依赖一些其它组件,项目主页上基本会有所提示。通过 pip 安装会比较顺利:

sudo apt-get install pip

这里要说一下,对于新手,我会觉得django有一个好主题grappelli, 有一个好的文件管理组件filebrowser, django-cms更是用户众多,tinymce也像是默认搭配的编辑器。但可惜他们如果放到一起工作就不会太顺利了,只能放弃一些选择。所以你这里会看到 django-filebrowser-no-grappelli-django14 这个玩意。其实django-filer也不错,但tinymce内部似乎只支持了filebrowser。

创建Project

django提供了方便的创建项目的工具:

django-admin startproject myCMS

创建好的项目会有一些基础配置文件,及一个工具文件,后续还会用到它。

settings配置

最重要的配置文件就是settings.py。settings中有以下项目需要理解:

DATABASES

用来定义django的数据库接口,这里使用方便的sqlite,只需要提供一个文件地址就可以了; 可以增加项目目录的自检查:

import os
PROJECT_DIR = os.path.abspath(os.path.dirname(__file__))

MEDIA_ROOT,MEDIA_URL, STATIC_ROOT, STATIC_URL

依次为文件上传的目录与访问它们的url, project或app所使用的css,js等静态文件的目录及访问他们的url地址。对于URL可以启一个apache服务专门来处理这些文件的请求,比如 http://127.0.0.1:8080 指到 MEDIA_ROOT 指定的目录。

TEMPLATE_CONTEXT_PROCESSORS

此项中定义了很多在模板中可以很方便使用的上下文对象,比如最常用的用户信息,及请求对象(rquest)的信息。

MIDDLEWARE_CLASSES

django的中间件列表。在web请求到达url匹配之前,都会按列表顺序在中间列中被过滤,所以希望全局对请求做一些处理可以开发一个中间件添加到这里。安装django-cms时,有几个cms依赖的中间件必须要添加:

'cms.middleware.page.CurrentPageMiddleware',
'cms.middleware.user.CurrentUserMiddleware',
'cms.middleware.toolbar.ToolbarMiddleware',

TEMPLATE_LOADERS, TEMPLATE_DIRS

模板是如何加载的,以上两项来解决这个问题。loaders定义了一些模板文件导入器,比如filesystem.Loader就是从TEMPLATE_DIRS中定义的目录来加载,而app_directories.Loader则是从app目录下的templates来加载,这里需要注意他们顺序,如果同名的话,就会有使用最先找到的那个模板。为了有所区分,最好的办法就是在templates下面使用project或app的名称做下一级目录:tempates/app/template_a.html。这样就不会有问题了。

INSTALLED_APPS

django的大部分功能是通过APP来实现的,通过此项来组装这些APP。系统会提供很多有用的APP, 我们自己也可以为一些功能开发一个独立的APP添加到这个元组中。以下为后续要用到的app列表:

'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.admin',
'django.contrib.staticfiles',
'cms',
'menus',
'mptt',
'south',
'cms.plugins.text',
'cms.plugins.picture',
'cms.plugins.link',
'cms.plugins.file',
'cms.plugins.snippet',
'cms.plugins.googlemap',
'sekizai',

'tinymce',
'filebrowser',

'easy_thumbnails'

django-cms安装时也会提供一个settings的模板文件,主要是列出需要的app, 其它设置可以查看文档

其它

一些APP需要的设置

CMS_TEMPLATES = (
    ('example.html', 'Example Template'),
)

CMS_SEO_FIELDS = True
CMS_REDIRECTS = True
CMS_USE_TINYMCE = True

TINYMCE_DEFAULT_CONFIG = {'theme': "advanced", 'relative_urls': False}
TINYMCE_FILEBROWSER = True

FILEBROWSER_DEBUG = True
FILEBROWSER_MEDIA_URL = 'http://127.0.0.1:8081/uploads/'   # 可以在本地启一个apache来访问这些上传文件

URLS配置

如果app在view层有展示,那就需要配置访问他的URL,比如tingMCE编辑器的安装就包括在project中的urls中增加以下代码:

url(r'^tinymce/', include('tinymce.urls'))

运行

要让django运行起来,还是需要执行一些命令,这时需要用到项目创建时自动生成的 'manage.py' 文件。

  • python manage.py syncdb --all生成数据库表
  • python manage.py runserver 让 django运行在自己的web服务器上

现在可以通过 http://localhost:8000/admin 来访问django的admin后台了。

附:

  • 如果发现filebrowser打不开,那很可能是没有在media目录下创建uploads目录,它不是自动创建的。