Блог Синявского
  • Разделы
  • Метки
  • Все статьи

Python Django CMS - FeinCMS

1

Python CMS

Не буду углубляться в терминологию, думаю что те кто зашел на мой блог и так прекрасно осведомлены о том что такое CMS. Для всех веб разработчиков всегда существует дилема выбора готовой CMS или написания своей собственной. Поскольку я не занимаюсь созданием сайтов в промышленных масштабах, то пытаюсь найти нечто готовое, изучить и по-возможности переиспользовать. В моем подходе есть недостатки, так как редко получается найти на 100% подходящее решение и зачастую кода больше чем необходимо. Но этот подход, с чем невозможно поспорить, увеличивает скорость разработки и улучшает кругозор, потому что исследуется чужой код. В основном, в работе я использую Django Framework. Но появилась необходимость в системе управления статическими страницами, для которой встроенное приложение django static pages уже недостаточно. Держать Django приложение для простого 10 страничного сайта, это неразумно, хоть я в итоге и делаю теперь так, в угоде других приоритетов, несколько сайтов на одной CMS, правильный шаблонизатор с наследованием. Но изначально хотелось что-нибудь поменьше, а также более юзерфрэндли для конечных пользователей. Так чтобы пользователь без лишних вопросов мог добавить страничку, отредактировать ее в tinymce или добавить видео из youtube лего и бысто. В общем набор как всегда взаимоисключающих требований. Но первое и самое важное для меня - это обязательно язык программирования Python. И в данном сегменте я нашел более 10 хороших вариантов, для изучения:

  1. Django CMS - основан на django
  2. PyLucid - основан на django
  3. Mezzanine - основан на django
  4. Pinax - основан на django
  5. Merengue - основан на django
  6. FeinCMS - основан на django
  7. DjangoLFC - быстрая CMS на django
  8. Plone - большой Zope основанный
  9. Kotti - основано на Pyramid
  10. Quokka project - основан на Flask (база данных MongoDB)
  11. Skeletonz
  12. NiVE
  13. ikaaro
  14. wagtail
  15. bottle - вообще micro cms

и так далее...

Сразу выбрал DjangoCMS, но она меня не впечатлила, осталась такой же как и была 10 лет назад и как всегда с ней установилось 100500 пакетов, дизайн меня не впечатлил, сложно обучать человека работать с админкой, Kotti - абсолютно другой подход и совершенно не известная для меня технология (обязательно к этому еще вернусь), Quokka пожалуй одна из лучших систем на сегодняшний день, очень удачная для пользователя, не перегруженная, современная, лишенная недостатков концепции фундамента, в виде больших фреймворков. Но есть одно но - это база данных MongoDB, если бы была база данных PostgreSQL то я бы выбрал её. После изучения каждого из вариантов, времени осталось мало и я решил - выберу что-нибудь более ли менее стабильное, то что я знаю, не перегруженное, и поскольку выяснилось, что Django cms приложение - Django cms приложению рознь мой выбор пал на FeinCMS.

О ней я сегодня и напишу.

FeinCMS

CMS написанная на Python, основана на Django, а в Django есть коровья сила - это значит, что при установке CMS у нас будут все бесчисленные возможности фреймворка Django. Библиотека содержит множество готовых решений для повседневных задач веб разработчика, позволяет быстро стартовать, а язык разработки гарантирует вам хорошую поддерживаемость кода. FeinCMS - это больше, чем система управления контентом (не только благодаря Django). Например, FeinCMS позволяет определить свои типы содержимого (Content Type), таким образом CMS представляется уже системой разработки веб приложений. В админке же есть все необходимое прямо из коробки для управления пользовательским контентом.

Важно! Принципы установки FeinCMS теже, что и у любого другого Django приложения. Это руководство будет также полезно для начинающих знакомиться с фреймворком Django.

К плюсам FeinCMS можно отнести также наличие, отнюдь не исчерпывающей, но официальной документации на readthedocs.org

Подготовка к установке FeinCMS

Необходимо обновить операционную систему. Все команды выполеняются под привелегированной учетной записью (от root)

# apt-get update
# apt-get upgrade

Далее установим необходимые библиотеки необходимые для работы Python и для установки его модулей

# apt-get install build-essential python-virtualenv git-core python-dev libtiff4-dev libjpeg8-dev zlib1g-dev libfreetype6-dev libpq-dev

Установка FeinCMS

Настроим виртуальное окружении, чтобы безопасно для системы установить FeinCMS со всеми зависимостями.

# mkdir /web/cms/logs scripts sql -p
# cd /web/cms/
# virtualenv -ppython2.7 env

Активируем виртуальное окружение

# source env/bin/activate

На сегодня 5 апреля 2015 у FeinCMS существуют проблемы с django 1.8, поэтому перед установкой cms следует установить django 1.7, остальные зависимости подтянутся вместе с FeinCMS.

pip install pytz django==1.7 feincms

Successfully installed feincms feedparser Django Pillow django-mptt

Установим модуль для работы с базой данных в моем случае это PostgreSQL (для MySQL mysql-python)

pip install psycopg2

Подготовка FeinCMS

Для запуска FeinCMS необходимо создать Django проект, в настройках которого прописать приложение feincms.

django-admin.py startproject feincms_project

cd feincms_project

Необходимо создать пользовательское приложение cms

python manage.py startapp cms

Изменим файл настроек Django в соостветствии с приложениями

nano feincms_project/settings.py

Внесем изменения в кортеж INSTALLED_APPS, добавим feincms приложения и cms:

INSTALLED_APPS = (
    # FeinCMS:
    'feincms',
    'feincms.module.page',
    'feincms.module.medialibrary',
    'cms',

    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
)

Необходимо изменить настройку базы данных

DATABASES = {
     'default': {
         'ENGINE': 'django.db.backends.postgresql_psycopg2',
         'NAME': 'dbname',
         'USER': 'user',
         'PASSWORD': 'secret',
         'HOST': '',
         'PORT': '',
     }
 }

Для запуска необходимо удалить или закомментировать строчку security в кортеже MIDDLEWARE_CLASSES

MIDDLEWARE_CLASSES = (
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
#    'django.middleware.security.SecurityMiddleware',
)

Подправим директорию поиска тэмплейтов:

TEMPLATE_DIRS = (
    os.path.dirname(__file__) + '/templates/',
)

TEMPLATE_CONTEXT_PROCESSORS = (
    'django.core.context_processors.request',
    'django.contrib.auth.context_processors.auth',
    'django.core.context_processors.static'
)

Для работы нужно urls.py привести к виду

nano feincms_project/urls.py
# -*- coding: utf-8 -*-
from django.conf.urls import patterns, include, url
from django.conf import settings
from django.contrib import admin

admin.autodiscover()

urlpatterns = [
    url(r'^admin/', include(admin.site.urls)),
    url(r'', include('feincms.contrib.preview.urls')),
    url(r'', include('feincms.urls'))
]

urlpatterns += patterns('',
    url(r'^media/(?P<path>.*)$', 'django.views.static.serve', {'document_root': settings.MEDIA_ROOT})
)

Создание базы данных

Для работы FeinCMS требуются модели. Это отличие этой CMS от других. Поэтому прежде чем создать базу данных необходимо создать модели.

nano cms/models.py
# -*- coding: utf-8 -*-
from feincms.module.page.models import Page
from feincms.content.richtext.models import RichTextContent

Page.register_templates({
    'title': 'Основной темплейт FeinCMS',
    'path': 'template1.html',
    'regions': (
        ('header', 'Шапка'),
        ('main', 'Содержимое'),
        ('sidebar', 'Сайдбар', 'inherited'),
        ('footer', 'Подвал'),
    ),
})

Page.create_content_type(RichTextContent)

Полное описание Page модуля FeinCMS в документации

Инициализируем базу данных

python manage.py syncdb

Создание темплейта

Нуобходима директория для хранения темплейтов

mkdir feincms_project/templates

Отредактируем темплейт модели, которую мы создали выше

nano feincms_project/templates/template1.html
<div id="header">
    {% block header %}
    {% for content in feincms_page.content.header %}
        {{ content.render }}
    {% endfor %}
    {% endblock %}
</div>

<div id="content">
    {% block content %}
    {% for content in feincms_page.content.main %}
        {{ content.render }}
    {% endfor %}
    {% endblock %}
</div>

<div id="sidebar">
    {% block sidebar %}
    {% for content in feincms_page.content.sidebar %}
        {{ content.render }}
    {% endfor %}
    {% endblock %}
</div>

<div id="footer">
    {% block footer %}
    {% for content in feincms_page.content.footer %}
        {{ content.render }}
    {% endfor %}
    {% endblock %}
</div>

Тестируем приложение

Запустим тестовый Django сервер

python manage.py runserver

Заходим в Django админку и создаем страницы на основе нашей модели

http://127.0.0.1:8000/admin/

Спасибо за внимание! Статья обязательно будет обновляться в соответствии с вашими комментариями. Да, еще, ;) если статья была вам полезна, щелкните по рекламе.



  • ← сюда
  • туда →

comments powered by Disqus

Опубликовано

05.04.2015

Обновление

05.05.2022

Категории

django

Тэги

  • cms 4
  • django 12
  • python 30

Всегда на связи

  • Блог Синявского - Ничего не переносить на завтра, это тоже проблема с прокастинацией?
  • © Алексей Синявский, по лицензии CC BY-SA если не указано иное.
  • С использованием Pelican. Тема: Elegant от Talha Mansoor