Mal sehen, was mit Common Lisp gemacht werden kann .
Der Zustand des Common Lisp-Ökosystems (2015) und die Awesome Common Lisp- Liste zeigen uns einige moderne Frameworks ( Caveman , Luzern , alle auf dem neuen Clack- Webanwendungsserver, einer Schnittstelle für Hunchentoot und andere Server). Lassen Sie uns mit unseren eigenen Erkenntnissen diskutieren.
Update 2019 : Es gibt ein neues Tutorial zum Common Lisp Cookbook: https://lispcookbook.github.io/cl-cookbook/web.html Es behandelt Routing, Template-Engines, das Erstellen eigenständiger Binärdateien, die Bereitstellung usw.
Update : Etwas später fand ich Snooze vom Schöpfer von Sly oder Emacs 'Yasnippet heraus und hatte einen viel besseren Eindruck als Caveman. Das Deklarieren von Endpunkten ähnelt dem Deklarieren von Funktionen. Einige Dinge, die in Caveman mühsam waren, sind in Snooze offensichtlich, z. B. der Zugriff auf die URL-Parameter. Ich habe nicht viel Erfahrung damit, aber ich empfehle es auszuprobieren.
Update Juni 2018 : Verpassen Sie auch nicht das laufende Umschreiben von Weblocks, es wird riesig! : D http://40ants.com/weblocks/quickstart.html Mit Weblocks können dynamische Webanwendungen ohne Javascript-Zeile erstellt werden, ohne dass die Vorder- und Rückseite getrennt werden müssen. Es ist komponentenbasiert, wie React, aber serverseitig. Zum Zeitpunkt des Schreibens (Juni 2018) ist es sehr Alpha, aber im Gange und es funktioniert, ich habe ein paar einfache Web-Apps.
Eine einfache Möglichkeit, die Anforderungsparameter abzurufen (z. B. get-get #key, get-post #key, get-cookie #key).
Ich fand den Luzerner Weg einfacher, er ist so einfach wie ein with-params
Makro ( Beispiel aus der Praxis ):
@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.")))
Cavemans Weg war mir weniger klar .
MySQL-Zugang
Caveman wirbt für die Datenbankintegration (mit Datafly und sxql von Fukamachi).
Sie können einfach clsql oder das Mito ORM verwenden: https://lispcookbook.github.io/cl-cookbook/databases.html
HTML-Formulargeneratoren, -verarbeitung, -validatoren usw.
Ich weiß nicht, ob es da draußen Formulargeneratoren gibt. edit : es gibt: cl-Formulare und Formlets oder wieder 1forms , die mit Caveman2 arbeiten.
Caveman hat keine (Problem im Jahr 2011).
Helfer zum Filtern von Benutzereingabedaten (z. B. HTML-Entitäten, Escape-Variablen zum Einfügen von Abfragen usw.).
Ratify ist eine Eingabevalidierungsbibliothek, die jedoch nicht in ein Framework integriert ist.
FLOSS und GNU / Linux freundlich: ✓
Andere Web-Sachen
Apropos Web, es gibt andere nette Bibliotheken in CL Land:
- Webserver: Woo ist ein schneller HTTP-Server, schneller als Nodejs (Vorsicht vor Diagrammen…), Wookie ist ein asynchroner http-Server.
- Dexador ist ein HTTP-Client
- Plump , lquery und CLSS erleichtern das Parsen von HTML und das Abfragen des DOM.
- cl-bootstrap bietet Twitter-Bootstrap-Verknüpfungen für die cl-who- Template-Engine (die Jade / Pug ersetzt, obwohl wir auch übliche Vorlagen haben).
Ajax in Lisp
(Denken Sie daran, mit Weblocks, siehe oben, brauchen wir diese möglicherweise nicht.)
Mit ParenScript können wir JavaScript in Common Lisp schreiben, ohne unseren üblichen Workflow zu leben, und somit die fetch
Web-API zum Schreiben von Ajax-Aufrufen verwenden.