Выбор веб-фреймворка: Nevow без прикрас

Сегодня очередь Nevow — веб-фреймворка, построенного поверх Twisted. Информацию о том, что представляет собой Nevow и как его использовать можете посмотреть в Введении в Nevow, а сегодня я рассказываю о своем впечатлении о Nevow.

Что пишут

Прежде чем взяться за Nevow я посмотрел, что же пишут о нем люди, уже попробовавшие его: Дункан МакГреггор от Nevow просто в восторге:

Хотя скорость разработки важна, нужно учитывать не только ее. Все говорят о том, как быстро можно развернуть проект используя веб-фреймворк X, и т.д. Но где то, что имеет больший приоритет для меня: насколько это подходит мне? Могу ли я сделать всё что захочу? После того, как дело сделано, могу ли добавить или убрать что-нибудь? Могу ли я сделать неожидаемые изменения быстро и просто, без ущерба целостности архитектуры?

И еще: могу ли я строить свои системы с ним?

И вот где я в востороге от Nevow. Мне комфортно с его дизайном, шаблонами, “внутренностями” и свободой для программиста. […] Nevow дает те инструменты и тот уровень комфорта, которые позволяют мне строить расширяемые системы легко и просто

На русском гораздо менее экспрессивно про Nevow сказал Дмитрий Кузнецов:

Занялся я освоением этого замечательного инструмента. Он всем замечателен и мне нравится, кроме одного — отсутствия документации. К сожалению, python для меня еще язык новый, в процессе изучения, так сказать, поэтому по коду самого фреймворка ориентируюсь довольно плохо. Короче говоря, достаточно непростое дело получается. Это не Smarty, где когда мне понадобился универсальный pager, Google меня привел прямо к плагину для фреймворка, который полностью удовлетворил мои нужды :) . А здесь замечателен только сам фреймворк. С сервером Twisted можно творить чудеса. Плагинов и кода написанного для фреймворка — что кот наплакал. Примеры, конечно, есть, но их ооочень мало. Документация — меньше десятка туториалов да скудненький мануал. А жаль.

Что думаю я

Я думаю, что Nevow был конкурентноспособен до появления нового поколения веб-фреймворков: Django, TurboGears, Pylons. Как только стали доступны эти инструменты, Nevow обречен на вымирание, как динозавр. Даже его преимущество (преимущество для меня в данной конкретной ситуации) — интеграция с Twisted — не способно перевесить недостатки. И самый главный недостаток — отсутствие внятной документации.

Чтобы написать мое тестовое приложение, мне пришлось не только прочитать всю документацию по Nevow, просмотреть все докстринги в nevow.rend, изучить невнятные примеры, но и поискать Nevow-проекты при помощи google/codesearch, а также поизучать код Prairie wiki и Pymon. Для сравнения: в Django достаточно пройти один туториал и прочитать две страницы документации. И еще один момент “для сравнения”: на написание Nevow-проекта мне понадобилось времени в несколько раз больше, чем на Django и Pylons вместе взятых.

Далее, не просто применение, а поощрение порочной практики смешивания логики и представления. Сплошь и рядом, в документации, в примерах, используется nevow.loaders.stan — построение DOM HTML-документа средствами Python.

Следущий момент, который заслуживает отдельного внимания, потому что я достаточно долго бился с ним. Формы. Уже во “Введении в Nevow” я обозначил некоторые проблемы Nevow-инструментов для обработки форм. Так вдобавок, ни formless, ни formal не имеют документации вообще, только примеры, причем с использованием nevow.loaders.stan. Но это еще не все. Обработка форм настолько кривая, что мне пришлось хачить ее для своего случая. Я не хочу особо вдаваться в подробности, лишь кратко скажу, что форма отрисовывается в фрагменте, а обрабатывается в странице, содержащей этот фрагмент. Ну и из-за абсолютно глупых ограничений, мне пришлось использовать механизм сессий, хотя в Django и Pylons я вполне успешно обошелся без них.

В итоге, я думаю, что потрачу меньше времени и усилий, а сам процесс мне будет более приятен, если буду использовать Django или Pylons, пусть даже мне и придется продумывать протокол обмена Twisted-сервиса и веб-фронтенда. Сухой остаток — Nevow не мой выбор.

Код тестового приложения можно взять с .

P.S.Уже после того, как приложение было написано, я встретил еще пару обзоров Nevow. Все они не слишком свежие (2005г), но с того времени в Nevow особо ничего не поменялось:

  • Twisted category at PyWebOff
  • Finding Nevow
Подписаться Комментировать

Комментарии

12.12.2006 22:02 Юревич Юрий

Я считаю, что Nevow, более низкоуровневый инструмент, чем тот же Django или Webware. И я не думаю что он так уж и обречен на вымирание, просто в том виде, в котором он сейчас существует, использовать его в реальных веб-проектах, мягко говоря, затруднительно. Но, в отличии от “более развитых конкурентов”, он не диктует какой-то определенный стиль программирования приложения, а это позволяет подогнать его под себя.

12.12.2006 22:51 Юревич Юрий

Во-первых, как я уже говорил, я не устраивал “синтетического” теста между фреймворками. Я выбирал инструмент для конкретной вещи — веб-интерфейс к Twisted-сервису. У Nevow в этом плане была фора — он построен на Twisted. Но по ходу создания приложения возникли сложности, преодолевая которые, я потратил много времени. Стоят ли эти сложности этого времени — я считаю, что нет. Это не сложность логики (приложение то было тривиальным), это борьба с фреймворком, с его недокументированными и неочевидными вещами.

Во-вторых, что касается высоко/низкоуровневых вещей. Mantissa того уровня? Вы ею пользовались? А как Вам sqlite-backend axiom? Я пробовал повторить вики- и блог-туториалы. Столкнулся с тем, что куча моментов либо пропущена, либо неверна. По коду туториалов — мне очень не понравились кольцевые импорты у модели и представления, и вряд ли их как-то можно избежать. Да и документация у Mantissa еще более бедная, чем у Nevow.

12.12.2006 23:01 Юревич Юрий

Я пользовался и Mantissa и Axiom. В их защиту ничего сказать немогу. Если Axiom хоть и имеет много интересных решений (я про те же powerups), но навязывает совсем не прозрачный механизм работы с пользователями системы он зря. Есть у Axiom и еще вагон недостактов/недоработок. А что касается Mantissa — абсолютно сырой продукт, его еще очень долго, я думаю, есть будет нельзя. Да и если убрать Axiom из Mantissa, то от последнего почти ничего не останется.

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

13.12.2006 0:34 Юревич Юрий

Привет, посмотрел на Neow по ссылке с первого постинга — ощущение, что с ним нельзя работать, возникло с первого взгляда.

Интереснее другое — неожиданно отличной штукой оказались упомянутые здесь ранее (кстати, спасибо) Colubrid и Paste. Перешел на них и очень доволен.

А вот с TurboGears и Django что-то незаладилось. В какой-то момент пытались перейти на TG, но он оказался просто неработоспособен с SQLAlchemy, а родные ORMы хиловаты против SQLA, для сколько нибудь сложной модели данных не подходят.

Вообще, складывается ощущение, что тесно интегрированные фреймворки — зло. Хорошо подходят для приложений типа “что-нибудь за двадцать минут”, но на сложных проектах эти преимущества как-то стремятся к нулю, а вот фактор борьбы с фреймворками возрастает. Честно пробовал внедрить сначала RoR, потом TG, потом Django…

В итоге мы остановились на Colubrid и Paste (для деплоймента и конфигурирования), и самописном валидаторе форм (Formencode не нравится совсем), и самописном генераторе форм (если понадобится, пока что-то не очень), и Genshi в качестве шаблонного движка.

Форма комментирования для «Выбор веб-фреймворка: Nevow без прикрас»

Обязательное поле. Не больше 30 символов.

Обязательное поле

Пожалуйста, введите символы, которые вы видите на изображении

13.12.2006 0:42 Юревич Юрий

Таки да, colubrid является наиболее универсальным “роутером” URL-object. Он поддерживает и Django-like, и CherryPy-like, и Web.py-like, и Routes-like роутинг. Забегая вперед, скажу, что из сравниваемой тройки мне наиболее симпатичен Pylons. Есть ряд интересных особенностей, которые связаны с WSGI-маниачностью автора :-) И он тоже использует Paste. Ну, не буду раскрывать все карты… ждите, скоро раскажу о Pylons ;-)

24.12.2006 16:36 Юревич Юрий

[…] Напомню тему разговора: выбираем инструмент для веб-интерфейса Twisted-сервиса. Django и Nevow уже рассмотрены, теперь очередь Pylons. […]