18 сентября 2013 г.

"Готовим" FeinCMS

FeinCMS - это, как очевидно из названия, система управления содержимым сайта на базе фреймверка Django. Очень простая и очень удобная с точки зрения разработчика Django. Не перегруженная "батарейками в комплекте". Здесь я приведу минимальные действия для использования приложения. На самом деле, возможностей у этой CMS куда больше.

Сразу стоит сказать о том, что установка этой CMS - не N кликов мышью и - заработало. Но за это вы получаете бОльшую расширяемость на уровне фреймверка.

Для работы вам необходим Python версии 2.6 и больше с установленными пакетами pip и virtualenv, ибо это правильно. Также вам потребуется библиотека PIL, которую лучше собирать из бинарников.

$ cd /path/to/devarea
$ virtualenv --system-site-packages feincookie
$ source feincookie/bin/activate

или, последняя строка для Windows:

feincookie\Scripts\activate

Так мы создали наше рабочее окружение, чтобы не мешать другим проектам. Для новичков хочу заметить, что это - очень важно! Разберитесь, пожалуйста, с virtualenv. Так вам будет проще жить в мире Python.

При использовании --system-site-packages питон будет использовать системные библиотеки вместо локальных. Это требуется для пользователей Windows, так как установка валидного PIL в окружение для них - задача не тривиальная и здесь мы её рассматривать не будем.

Теперь качаем Django и создаем проект для неё:

$ pip install Django==1.4
$ cd feincookie
$ python bin/django-admin.py startproject feinpro

или, последняя строка для Windows:

python Scripts\django-admin.py startproject feinpro

Далее - устанавливаем еще пару пакетов:

$ pip install feincms
$ pip install django-mptt==0.4

Проверяем, что все наши усилия не напрасны:

$ pip freeze --local
Django==1.4
FeinCMS==1.7.4
django-mptt==0.4.0

Создаем нужную файловую структуру:

mkdir feinpro/static feinpro/media feinpro/templates

Далее - начинаем редактировать файлы django-проекта для интеграции с FeinCms. Вначале - feinpro/feinpro/settings.py. Добавляем имя файла для базы данных SQLite (вы, конечно можете определять другие настройки для себя):

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': '/path/to/devarea/feincookie/feinpro/feinpro.db',
        'USER': '',
        'PASSWORD': '',
        'HOST': '',
        'PORT': '',
    }
}

Затем - добавляем настройки для локальной обработки медиа, статики и местоположения переопределенных шаблонов:

MEDIA_URL = '/media/'
MEDIA_ROOT = '/path/to/devarea/feincookie/feinpro/media'
STATIC_URL = '/static/'
STATICFILES_DIRS = (
    '/path/to/devarea/feincookie/feinpro/static',
)
TEMPLATE_DIRS = (
    '/path/to/devarea/feincookie/feinpro/templates',
)

В переменной INSTALLED_APPS раскомментируем:

    #...
    'django.contrib.admin',
    'django.contrib.admindocs',
    #...

и добавим:

    #...
    'feincms',
    'feincms.module.page',
    'feincms.module.medialibrary',
    'feinpro',
    #...

Файл feinpro/feinpro/urls.py здесь приведу полностью, т.к. в нем больше изменений, чем нетронутых строк:

from django.conf.urls import patterns, include, url
from django.contrib import admin
from django.contrib.staticfiles.urls import staticfiles_urlpatterns
from django.views.generic.simple import direct_to_template

admin.autodiscover()

urlpatterns = patterns('',
    url(r'^admin/doc/', include('django.contrib.admindocs.urls')),
    url(r'^admin/', include(admin.site.urls)),
    url(r'', include('feincms.urls')),
)

# for static processing
urlpatterns += staticfiles_urlpatterns()


# for media processing (ONLY FOR DEVELOPE!)
from django.conf import settings

if settings.DEBUG:
    from django.conf.urls.static import static
    urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

На этом подготовка завершена. Осталось лишь определить модели данных. Добавляем файл feinpro/feinpro/models.py следующего содержания:

# -*- coding: utf-8 -*-
from feincms.module.page.models import Page
from feincms.content.raw.models import RawContent

Page.register_extensions('navigation', 'seo', 'titles',)

Page.register_templates({
    'title'   : u'Стандартный шаблон', 
    'path'    : 'base.html', 
    'regions' : (
        ('content', u'Содержимое',),
    ),
})

Page.create_content_type(RawContent)

Теперь создадим шаблон для наших страниц в feinpro/templates/base.html:

<!DOCTYPE html>
<html>
    <head>
        <title>{{ feincms_page.title }}</title>
        <meta charset="utf-8">
    </head>
    <body>
        {% for page in feincms_page.content.content %}
        {{ page.render }}
        {% endfor %}
    </body>
</html>

На этом этапе мы уже имеем готовый минимальный проект на FeinCMS. Давайте запустим всю эту радость:

$ python feinpro\manage.py syncdb
$ python feinpro\manage.py runserver

Открываем браузер и вводим 127.0.0.1:8000/admin, наш логин и пароль при создании таблиц базы данных и видим админку, в которой появились два приложения, коих нет в коробке Django: medialibrary (для работы с загружаемыми пользователями файлами) и page (наши страницы). Попробуйте добавить страницу, а затем перейти по URL, указанном при создании этой страницы. Всё должно работать. Если что-то не работает или работает не так, проверьте еще раз все шаги или начните заново. Повторение - мать учения.

Комментариев нет:

Отправить комментарий