← Архив: Common Lisp

Аналог django для CL

Author: · 18.11.2010 03:50
· original author: new_lisper
Есть ли аналогичное django в мире Лиспа? То есть хочется full-blown web framework. С системой аутентификации, маршрутизации запросов, шаблонным движком, и т.д.
· original author: archimag
> Есть ли аналогичное django в мире Лиспа?
Нет.
> То есть хочется full-blown web framework.
Лично я считаю, что не нужен. А Django неповоротливый монстр. Сейчас же и в мире Python есть тенденция отказа от подобных монстрообразных решений в пользу так называемых микро-фреймворков. 
> маршрутизации запросов
Система маршрутов в RESTAS будет по-мощнее, чем в Django, RoR или даже в Pylons.
> шаблонным движком
Лучшей существующей системой шаблонов я считаю Google Closure Templates, я почти полностью (не хватает поддержки локализации, а также сообщений об ошибках) переписал её на CL - cl-closure-template. Другая известная система - HTML-TEMPLATE, но она довольно старомодна (написана под влиянием HTML::Template).
> системой аутентификации
Систему аутентификации в Django, как только потребности приложения превышают её возможности, начинает создавать массу проблем. Само чтения обсуждений по их преодолению изрядно доставляет. Для данного сайта я написал модуль https://github.com/archimag/restas-simple-auth, который можно использовать и в других приложениях. Правда, его надо серьёзно дорабатывать, но у меня к этому пока нет потребности, ибо приходится работать в основном с корпоративными система аутентификации на базе HTTP.
· original author: slav
> Лучшей существующей системой шаблонов я считаю Google Closure Templates,

Лично мне кажется, что хорошая система шаблонов, предназначенная для генерации html/xhtml, должна автоматически обеспечивать чтобы результат был как минимум well-formed (а в идеале - вообще валидный документ). Ни один шаблонизатор, работающий с документом как с простым текстом, этого не может (в т. ч. упомянутый closure template, tt2 и пр.).
Вообще мне нравится идея построения xslt преобразований - шаблон разбивается на много мелких, нужный из которых выбирается с помощью pattern matching-а. Плюс автоматом получаем well-formed xml/html. Xslt, конечно, не лишён многих недостатков (самый большой, пожалуй - неудобный и чрезмерно многословный синтаксис), но даже не смотря на них лично мне делать шаблоны на xslt приятнее чем на plaintext движках. Быть может, можно сделать что-то подобное, но с нормальным синтаксисом.
По поводу cl-closure-template - я её щупал какое-то время назад (наверное уже с полгода назад), впечатления скорее отрицательные. Вообще довольно тяжело написать библиотеку общего назначения (чтобы было "удобно всем" а не "удобно мне"); cl-closure-template archimag всё-таки пишет для себя и под себя - ему, возможно, там всё удобно и всё работает так, как надо, а мне из-за всяких разной величины косяков от её использования пришлось вообще отказался. Очень неудобно полное отсутствие сообщений об ошибках (вот подправил ты шаблон чуть-чуть, перекомпилил - ошибок вроде нет; а потом смотришь на результат и видишь какую-то лажу); производительность тоже никуда не годится - мне надо было отображать на странице несколько тысяч небольших строк таблицы с данными - cl-closure-template генерил это страницу ~20 секунд - и это при том что он комилируется в cl-код, т. е. вроде как должен быть довольно шустрым. А получается почему-то наоборот. Для сравнения, какой-то cl-who-подобный шаблонизатор, который я воткнул вместо cl-closure-template, генерировал тот же самый html менее чем за секунду.
Не знаю, может сейчас это всё уже поправлено, но полгода назад до состояния "шаблонный движок общего назначения" его нужно было ещё пилить и пилить...
· original author: archimag
> хорошая система шаблонов, предназначенная для генерации html/xhtml, должна > автоматически обеспечивать чтобы результат был как минимум well-formed
Это приводит к существенному усложнению использования ради борьбы с проблемой, которая реально не существует. В документации к Google Closure Templates как раз специально написано, в что это хорошо, что можно генерить что угодно и не обязательно валидный xhtml/html.
> Вообще мне нравится идея построения xslt преобразований 
Я долго использовал XSLT. Сейчас я считаю, что это было ужасно. cl-closure-template как раз появилась когда я больше не мог терпеть сложившуюся ситуацию.
> cl-closure-template archimag всё-таки пишет для себя и под себя
Скорей просто реализую опубликованную спецификацию.
> Очень неудобно полное отсутствие сообщений об ошибках
Согласен. Было бы хорошо, но как бы проблема для меня получается не настолько актуальной, что бы появилась мотивация для её решения (
> производительность тоже никуда не годится

> сl-closure-template генерил это страницу ~20 секунд 

А вот это было бы интересно. Если бы вы привели свои данные и шаблоны, то возможно я бы мог исправить ситуацию. Потому что у меня проблем с производительностью нет. И если я не знаю я подобных проблемах, то не могу их исправить.
· original author: Pirr
Если framework-a нет, то я так понимаю и cms на common lispe - нет?
· original author: archimag
> Если framework-a нет
Есть, но не такие как Django
> я так понимаю и cms на common lispe - нет?
CMS точно нет.
· original author: Pirr
>Есть, но не такие как Django
Намек на RESTAS понятен ;)
Где можно почитать инструкцию по установке RESTAS? А то weblocks с ходу я не осилил :(
· original author: archimag
> Намек на RESTAS понятен ;)
Есть же и другие, здесь был некоторый обзор.
> Где можно почитать инструкцию по установке RESTAS? 
Ну, дык, restas.lisper.ru же )) Вообще, сейчас установка RESTAS возможна с помощью Quicklisp, так что если вы не пользователь Gentoo, то это самый просто способ установки. Инструкция по использованию Quicklisp доступна здесь.
> А то weblocks с ходу я не осилил
Я вообще являюсь принципиальным противником Weblocks и т.п. фреймворков (UCW, CoreServer и т.п.), ибо считаю, что тянуть продолжения в веб абсолютно не перспективно, да и вообще вредно (ибо не соответствует REST).
· original author: Pirr
Все нашел инструкцию по RESTAS
· original author: Pirr
>Ну, дык, restas.lisper.ru же )) Вообще, сейчас установка RESTAS возможна с помощью Quicklisp, так что если вы не пользователь Gentoo, то это самый просто способ установки. Инструкция по использованию Quicklisp доступна здесь.
Спасибо, буду пробовать.
· original author: dmitry_vk
Тут ведь еще есть такой момент, что не всегда надо генерировать well-formed xml/html (да и само понятие well-formed'ности разнится). И кроме well-formedness, есть другие моменты, важные для веб-разработки, которые нельзя учесть, если считать страницу просто документом xml/xhtml. Ну например, известный факт, что Internet Explorer не отображает страницы ошибок, размер которых меньше определенного размера; или что вставка условного комментария в определенное место страницы влияет на параллельную загрузку скриптов. 
ИМХО, шаблонизатор должен удовлетворять следующим простым критериям:
1) позволять генерировать произвольный текст
2) быть модульным
3) прозрачно работать с экранированием символов - т.е., так, чтобы по умолчанию подстановка параметров из данных была экранирована
closure-template, на мой не очень детальный взгляд, этому удовлетворяет.