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

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

evgen
06.03.2020 в 20:01
Алексей
15.06.2020 в 17:29

Вы написали, что «и ничего не выбрал», но указали два лидера. К чему пришли сами? с нуля на Django писать?

Ответить
Михаил Павлов
15.06.2020 в 18:16

Да, ничего не выбрал. И да , правильно, можно написать на джанго.
Но джанго это 90% для веб приложений.

А для сайтов, блогов, я Джанго не стану советовать.
Просто если выбрал питон, то и подход должен быть серьезным и обусловлен каким то мотивом т.е. не просто так. И питон тоже понадобился зачем-то.

И , кстати, для меня выбор форумного движка даже на php та ещё мука — все не устраивает. Ну максимум на 60%, не больше.

Ответить
Алексей
27.06.2020 в 08:39

Почему-то уведомления об ответе не приходили, может быть в спам попали. Я только начал изучать Django, книжку Дронова читаю, дошел до создания комментариев. Подскажите, почему Джанго для сайтов не подходит?

Я изучил Python, переписал программу с Lazarus на Python 3, решил Джанго изучить и для начала сделать блог на нем, посмотреть как его будут поисковые системы кушать.

Ответить
Михаил Павлов
27.06.2020 в 12:32

1. посмотрел Ваш сайт. приятно. правильное дело. (и я за общение вне соц сетей.)
2.

Подскажите, почему Джанго для сайтов не подходит?

ну можно и сайты делать на нем , но юзерам «сложновато» это, им всем тильду подавай. сайт это в 90% просто статика и одна php для приема данных с формы.
это можно и генераторами и редакторами сделать. тут главное «красота, текст и подача + психология».
а django это совсем про другое. это чтобы работать с данными в бд через спец веб интерфейс. и не просто crud а что то еще с ними делать.

посмотреть как его будут поисковые системы кушать.

Если Вы генерите просто html на выходе, то будут кушать поисковые системы это, не сомневайтесь.

Я изучил Python, переписал программу с Lazarus на Python 3

тоже норм шаг, но тогда логичнее было на go писать ^-) \ шутка с долей не шутки.

движение в ПРОСТО веб (такой совсем популярный веб) это в php, а движение в веб приложения это либо в python или если у вас уже есть бабки и замах то в go.
а если вам пофиг на бюджеты, то kotlin, jvm итд (но тут нужны еще мотивы, типа особой любви к чему-то)
тут не строго все, главное в том, что любая команда, на любом инструменте может сделать конфетку если она понимает что делает.
но сами инструменты уже имеют ориентацию по направлениям, но тут все не строго потому что и кувалдой и молотком можно забивать гвозди.

расширю немного ваш взгляд на это все.
Вы читаете книжку по джанго = по многостраничным веб приложениям которые рендерятся по шаблонам на сервере.
сейчас есть направления с рендерингом на клиенте и есть многостраничность и одностраничность. ваш выбор точно будет хорошо индексироваться.
что лучше это философский почти вопрос и точно холиварный, большинство наверное будет за spi, но в последнее время народ поднаелся и этого тоже.
еще в вашем векторе есть сильный RoR , но главное не в этом, а все таки в том, «удобно юзеру или нет» — тут все по старому.

если ваш инструмент решает проблемы юзера и ему удобно, то технология реализации не важна (100%)

Ответить
Алексей
27.06.2020 в 12:45

Спасибо Вам за ответы. Буду потихоньку изучать Django, изучу, попробую какой-нибудь более-менее серьезный сайт на нем написать и там виднее будет.

Еще раз спасибо Вам за советы!

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

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