Давайте посмотрим, что можно сделать с помощью Common Lisp.
состояние экосистемы Common Lisp (2015 г.) и Awesome Common Lisp показывает нам пару современных фреймворков (Caveman, Люцерн, все построено на новый сервер веб-приложений Clack, интерфейс для Hunchentoot и других серверов). Давайте обсудим с нашими собственными выводами.
update 2019: есть новое руководство по Common Lisp Cookbook: https://lispcookbook.github.io/cl-cookbook/web.html Он охватывает маршрутизацию, механизмы шаблонов, создание автономных двоичных файлов, развертывание и т. д.
update: чуть позже я узнал о Snooze от создателя Sly или Emacs 'Yasnippet, и произвел на него гораздо лучшее впечатление, чем, скажем, Caveman. Объявление конечных точек похоже на объявление функций, поэтому некоторые вещи, которые были утомительны в Caveman, очевидны в Snooze, например, доступ к параметрам URL-адреса. У меня нет большого опыта с этим, но я рекомендую проверить это.
обновление июнь 2018: также не пропустите текущую перезапись Weblocks, это будет огромно! : D http://40ants.com/weblocks/quickstart.html позволяет создавать динамические webapps, без строчки Javascript, без разделения лицевой и обратной сторон. Он основан на компонентах, как React, но на стороне сервера. На момент написания (июнь 2018) он был альфа-версией, но в процессе, и он работает, у меня работает пара простых веб-приложений.
Простой способ получить параметры запроса (что-то вроде: get-get #key, get-post #key, get-cookie #key).
Я нашел более простой способ Люцерна, он такой же простой, как макрос with-params
(пример из реальной жизни):
@route app (:post "/tweet")
(defview tweet ()
(if (lucerne-auth:logged-in-p)
(let ((user (current-user)))
(with-params (tweet)
(utweet.models:tweet user tweet))
(redirect "/"))
(render-template (+index+)
:error "You are not logged in.")))
Путь пещерного человека был для меня менее ясным.
MySQL доступ
Caveman рекламирует интеграцию с базами данных (с Datafly от Fukamachi и sxql).
Вы можете просто использовать clsql или Mito ORM: https://lispcookbook.github.io/cl-cookbook/databases.html
Генераторы HTML-форм, обработка, валидаторы и т. Д.
Я не знаю, есть ли там генераторы форм. edit: есть: cl-forms и formlets или снова 1forms, работающий с Caveman2.
У пещерного человека нет его (проблема возникла в 2011 году).
Помощники для фильтрации вводимых пользователем данных (что-то вроде htmlentities, escape-переменные для ввода запросов и т. Д.).
Ratify - это библиотека проверки ввода, однако она не интегрирована в структуру.
Совместимость с FLOSS и GNU / Linux: ✓
Прочие веб-материалы
Говоря о Интернете, в стране CL есть другие интересные библиотеки:
- веб-серверы: Woo - это быстрый HTTP-сервер, быстрее, чем Nodejs (остерегайтесь диаграмм ...), wookie - это асинхронный http-сервер,
- Dexador - это HTTP-клиент.
- Пухлый, lquery и CLSS упрощают синтаксический анализ HTML и запросы к DOM.
- cl-bootstrap предлагает ярлыки twitter-bootstrap для cl-who шаблонизатор (который заменяет Jade / Pug, хотя у нас тоже есть обычные шаблоны).
Ajax в Лиспе
(помните, с Weblocks, см. выше, они нам могут не понадобиться)
С помощью ParenScript мы можем писать JavaScript на Common Lisp без привычного рабочего процесса. , и, таким образом, мы можем использовать fetch
веб-API для написания вызовов Ajax.
person
Ehvince
schedule
16.03.2017