Close

28.06.2015

12 не годных CMS или как я выбирал нам CMS на Python — и ничего не выбрал.

Выбираем CMS на Python/Django.  для нужд нашей компании.

с PHP никто не хочет иметь дело, да и опыт у нас совсем не php, а скорее java + python + другое. а корпоративную «тяжелятину» не хочется.

я попробвал разные python cms в основном поверх django. и высказывался об опробованном.

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

Может вам эта информация чем-то поможет.

список cms с которым работал
https://code.djangoproject.com/wiki/CMSAppsComparison

========================================

django-page-cms
https://pythonhosted.org/django-page-cms/installation.html
использовал python3 — не вышло, код написан для python2.
django у меня 1.7 надо 1.6 — ругался на что-то в процессе установки. но все поставилось.

команда python manage.py runserver не пошла:

pavlov@pavlov-pc:~/SATEK/cms/django-page-cms/example$ python manage.py collectstatic pagespython manage.py runserver
../pages/testproj/documents/models.py:15: RemovedInDjango18Warning: Creating a ModelForm without either the 'fields' attribute or the 'exclude' attribute is deprecated - form DocumentForm needs updating
class DocumentForm(ModelForm):

CommandError: Command doesn't accept any arguments

думаю это связано с версией django. ставить VirualEnv и другую ждангу пока не стал. подумал, что это «слишком».

PS а зря. без venv похоже никак.

=======================================
The flatpages app
http://docs.djangoproject.com/en/dev/ref/contrib/flatpages/
приложение джанго. в админе можно редактировать в html виде страницы.
это два поля — содержимое и заголовок. можно указать шаблон.
в джанге приложение указывается путь типа /pages/* и там оно живет — показывает страницы.
примитив, не визивиг.. рассматривать не будем.

======================================
django-simplepages
http://code.google.com/p/django-simplepages/
тут https://code.djangoproject.com/wiki/CMSAppsComparison
он очень описывается по возможностям, убого — не рассматриваем

 

=======================================

django-cms

https://www.django-cms.org/en/

# pip install django-cms # - установилась django-cms-3.0.12.tar.gz
# sudo python3.4 -m pip install django-cms # тоже кажется прошло

вышла у них версия 3.0
https://www.django-cms.org/en/blog/2014/04/09/django-cms-30-released/
инсталлер есть (все еще бета, у меня он выдавал исключения)
https://github.com/nephila/djangocms-installer
там кстати есть таблица совместимости версих django-cms и версий django
совместимость версий джанги и питона
https://docs.djangoproject.com/en/dev/faq/install/#what-python-version-can-i-use-with-django
туториал
http://django-cms.readthedocs.org/en/latest/introduction/index.html
ввел при установке тайм зону: Europe/Moscow
при миграции это поле оставлял пустым, иначе ошибка — неверная тайм зона
при запуске наоборот , ошибка когда пустое поле, когда заполнишь — все ок.
какие уже вижу недостатки:
django и django-cms в частности разворачиваются командами.
команды есть для всего, и их надо знать. часть от джанги, часть от cms,
теперь еще и от инсталлера. погружаться в это не охота.
проще иметь конфиг и править в нем все что надо однообразно запускать.
запускаешь команду, она что-то меняет не понятно как вернуться назад… ?
если ошибка (стек исключения) — не понятно порушилось что было или нет.
и как тогда вернуться, поект порушен ?

еще минус — следуешь туториалу, делаешь команды.
не понятно что ты уже сделал и что еще надо сделать.
если список команд кончился ты что-то на диске имеешь,
как этим пользоваться, что с этим делать? что мы получили?
набор модулей требуемых джанге

pip install django django-cms djangocms_video djangocms_teaser djangocms_picture djangocms_link django-reversion djangocms_inherit djangocms_googlemap djangocms_flash djangocms_file djangocms_column djangocms-installer djangocms_text_ckeditor djangocms_style

Сотрем предустановленное приложение по умолчанию и создайте новое для Django CMS.

rm -rf ROOT; djangocms -p . ROOT # отвечаем на вопросы

Введите команду для создания нового файла и указания точки входа для mod_wsgi модуля:

vim ROOT/application

вставить надо следующие строки

-----------------
import os,sys
virtenv = os.environ['OPENSHIFT_PYTHON_DIR'] + '/virtenv/'
virtualenv = os.path.join(virtenv, 'bin/activate_this.py')
try:
execfile(virtualenv, dict(__file__=virtualenv))
except IOError:
pass
sys.path.append('/opt/repo')
sys.path.append('/opt/repo/ROOT')

os.environ['DJANGO_SETTINGS_MODULE'] = 'ROOT.settings'

import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()
------------------<<<<
редактируем
vim ROOT/settings.py
найти и заменить строку
---------
STATICFILES_DIRS = (
os.path.join(BASE_DIR, ‘ROOT’, ‘static’),
)
---------- заменить на это
STATICFILES_DIRS = (
os.path.join(BASE_DIR, ‘ROOT’, ‘static_local’),
)
-------------

иначе там все в куче будет лежать
Создайте новую поддиректорию для статического контента:

mkdir ROOT/static_local

запустите синхронизацию ресурсов (что это???):

./manage.py collectstatic

открываем в браузере /admin — для панели
создать суперюзера иначе не зайти

python manage.py createsuperuser

РАЗВЕРНУЛ я «это чудо».
в общем работа со страницами считаю базовая, но гибкая., кроме нее ничего не увидел.
видимо в cms только редактирование контента страниц.
блоги и прочее — добавляются как отдельные приложения.
структура данных, талиц оказывается 40 ! — никогда бы не подумал.
страница с базовыми настройками + расширенными настройками
состоит из блоков и/или контейнеров блоков.
блоки разных типов. они входят в страницу или контейнеры, например наборы колонок.
блок (напр. картинка) внутрь блока не входит. иногда можно в текст вставить ссылку на картинку,
хранить ее надо в media
есть странные сущности — местозаполнители.
блок картинка — хранится отдельно на дисе. в бд ссылка на нее. и настройки отображения.
для каждого типа блока — своя таблица.
в отдельной таблице ведется история изменений каждой фиговины. (ревизии)
данные сессий хранятся в отдельной таблице в БД
миграции БД хранятся тоже в БД… как то это, ну это от джанго каркаса осталось
типы контента в отдельной талице (модульность, елы, каждый модуль пишет сюда про себя)
ПЕРВОЕ ВПЕЧАТЛЕНИЕ
не смог я сразу врубиться в их схему данных, по моему многовато 40 таблиц.
все объекты ссылаются на две штуки ид черновика, и ид публичный.
версии это портят наглядность. у каждой страницы для каждого языка для черновик/чистовик есть ид.
учитывая версии страницы становится меного идишников.
что-то ссылается на саму страницу, чтот о на ид черновика/чистовика, что-то на версию. не всегда понятно.
какие -то «лишние поля» типа left, right у версий… (разобрался — это структура для http://github.com/django-mptt/django-mptt/)
чтобы извне менять эту бд лично мне страшно консистентность нарушить если недопонимаешь схему.
учитывая это не совсем понятно из чего и как собирается контент страницы из этих блоков ?
сколько это чтений БД ? алгоритм влоб не проглядывается сразу (лень разбираться и там реально много ссыллок друг на друга)
в целом, это joomla на python, т.е. для редактирования контента из менющек
в стесненных условиях, завести контент можно вручную.
но автоматически его вывести или сгенерировать страницы по данным не понятно как.
это вызовет трудности при стыковке с самописными приложениями.
смотрим на другой проект
=========================================
feincms
http://www.feincms.org/
встроенный блог — не rich
для блога предлагается использовать вместе с этим http://github.com/feincms/feincms-elephantblog
редактор страниц — rich поддерживает
пробую использовать питон 3.х через окружение для :

$ pip install feincms

поставилась на ура, пара секунд.

git clone git://github.com/feincms/feincms.git

дальше настройка
….. пока пропущу
схема данных (из example DB) — 29 таблиц. уже не пугает
мого сайтовый
пользователи, права, роли, группы,
сессии хранятся в БД
дерево из страниц,
страница состоит ил списка блоков. блоков не много: raw_text, rich_text, image, madia_file
в бд легко понять, структуру данных, менять состав страниц легко.
многоязычности не увидел, хотя заявлено
минималистично и функционально.
==============================================
Ella
http://ella.github.io/
http://ella.github.io/tutorial/0-setup.html#tutorial-0
выглядит не плохо, но не поддерживает питон 3.х, а мы наелись проблемами с кодировками по горло
не рассматриваем

=================================================
merengue
http://www.merengueproject.org/
первое ощущение, выглядит серьезно. большой размер много зависимостей
в процессе установки подменил ez_setup.py отсюда https://pypi.python.org/pypi/ez_setup
для совместимости с 3.x.
про установку
http://docs.merengueproject.org/topics/install.html#topics-install
(!!! на этой стрнице подло написано что python 3 не поддерживается)
но я ставил еще и по внутреннму файлу docs/topic/install.txt из репы
делаем проект (у них своя тулза… ну как же без этого?)
merengue-admin.py startproject myproject
пока облом. позже вернусь к проекту.

==================================================
Mezzanine
http://mezzanine.jupo.org/
возможности:
https://pypi.python.org/pypi/Mezzanine
в двух словах: система похожа на wordpress со встроенным магазином.
на их issue в github поиском нашел слова о python3 fix. вполне не плохо.
о! тут есть совместимость с 3.3 https://pypi.python.org/pypi/Mezzanine
ставим
делаем новое окружение для третьего питона … потом

$ pip install mezzanine # качаем 7 метров + еще много пакетов

окружение начинает занимать в итоге 58 метров.
в итоге появляется команда mezzanine-project
делаем

$ mezzanine-project project_name # я назвал satek
cd satek # вся папка занимает 50кбайт
#инициализация приложения джанги
python manage.py createdb --noinput # теперь 3 метра
python manage.py runserver # красота,

тут админ http://127.0.0.1:8000/admin/ username: admin, password: default
по функционалу очень удобно то что из коробки. есть радактирование блока на месте. рейтинги, коменты.
смотрим схему данных. 35 таблиц
29 типов контента: permission group user content type redirect session site Setting Site permission Comment Keyword assigned keyword Rating Blog post Blog Category Form Field Form entry Form field entry Page Rich text page
а блоки 4-х типов. линк почему то выделен в отдельныйтип блока.
страница может быть какого-то одного типа контента,
страницы могут быть дочерние и образовывать структуру.
(как их рисовать это второй вопрос,
например можно контент набирать из «страниц» разного типа в виде дереве,
но отображать определенные страницы как блоки родителя…это view)
есть интегрция с твитером, но нам она не нужна.
путаницы с версиями нет. путаницы с деревом нет — тупо по parent_id хранится
пробуем поставить mezzanine-slides https://github.com/overshard/mezzanine-slides
прошел по инструкции — получилось. добавился модуль:
к странице можно приделать список слайдов,описать их.
вставил в шаблон страницы требуемые ссылки на JS CSS и
заинклудил блок показа слайдов — слайды показались…
пакет виджетов кажется перспективным
https://github.com/osiloke/mezzanine_widgets
интерфейс командной строки
https://github.com/adieu/mezzanine-cli
опросы
https://github.com/sebasmagri/mezzanine_polls
события/мероприятия
https://github.com/stbarnabas/mezzanine-events
капча
https://github.com/mjtorn/mezzanine-captcha
интернет магазин
http://cartridge.jupo.org/
страница из блоков
https://github.com/renyi/mezzanine-blocks
можно осторожно просматривать возможности разных сторонних решений.
самое ценное в них — можно посмотреть как люди расширяют мезанин.
чтобы лучше понимать как решать с ним задачи.

лидеры :

  • Mezzanine
  • Feincms

One Comment on “12 не годных CMS или как я выбирал нам CMS на Python — и ничего не выбрал.

evgen
06.03.2020 в 20:01

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *