2008-11-24 12 views
10

Jedes Beispiel, das ich von CGI/Perl gesehen habe, besteht aus einer Reihe von Druckanweisungen, die HTML enthalten, und das scheint nicht der beste Weg zu sein, eine CGI-App zu schreiben. Gibt es einen besseren Weg, dies zu tun? Vielen Dank.Was ist der beste Weg, um eine Perl-CGI-Anwendung zu schreiben?

EDIT: Ich habe beschlossen, CGI :: Application und HTML :: Template zu verwenden, und verwenden Sie das folgende Lernprogramm: http://docs.google.com/View?docid=dd363fg9_77gb4hdh7b. Vielen Dank!

Antwort

17

Absolut (wahrscheinlich sehen Sie sich Tutorials aus den 90ern an). Sie werden ein Framework auswählen müssen. In Perl-Land das sind die beliebtesten Möglichkeiten:

+0

Danke! Ich werde sie ausprobieren und Ihre Antwort akzeptieren, wenn ich Zeit habe, sie auszuprobieren (sollte nächste Woche sein, ich gehe in den Urlaub :-)) – ristonj

+0

Ich frage mich, ob Jifty immer noch eine gute Wahl ist? Wird es aufrechterhalten? Ich stelle fest, dass es aus Debian entfernt wird, weil es nicht weit verbreitet ist. Das letzte Update von Jifty zum CPAN war 2011. – jeremiah

+0

Ja, Jifty sollte wahrscheinlich aus dieser Liste entfernt werden. Aber andere sind definitiv aufgestiegen, um ihren Platz einzunehmen. Ich würde jetzt Dancer und Mojolicious zu dieser Liste hinzufügen. – mpeters

11

Das ist eine wirklich, wirklich große Frage. Kurz gesagt, der bessere Weg heißt Model/View/Controller (alias MVC). Mit MVC ist Ihre Anwendung in drei Teile aufgeteilt.

Das Modell ist Ihre Daten und Geschäftslogik. Es sind die Dinge, die den Kern Ihrer Anwendung ausmachen.

Die Ansicht ist der Code zum Präsentieren von Dingen für den Benutzer. In einer Web-Anwendung wird dies normalerweise eine Art von Vorlagensystem sein, aber es könnte sich auch um eine PDF- oder Excel-Tabelle handeln. Grundsätzlich ist es die Ausgabe.

Schließlich haben Sie den Controller. Dies ist verantwortlich für das Zusammenfügen von Model und View. Es nimmt eine Benutzeranforderung an, ruft die relevanten Modellobjekte ab und ruft die entsprechende Ansicht auf.

mpeters erwähnte bereits mehrere MVC-Frameworks für Perl. Sie sollten auch eine Vorlagen-Engine auswählen. Die beiden beliebtesten sind Template Toolkit und Mason.

5

Die Perl5 Wiki bietet eine gute (aber noch nicht vollständige) Liste von web frameworks & templates.

Die Vergleichsartikel, die im Wiki-Eintrag "templates" verlinkt sind, sind lesenswert. Ich würde auch empfehlen, diesen push style templating systems Artikel auf PerlMonks zu lesen.

Für Templating ist dann Template Toolkit derjenige, den ich am meisten benutzt habe und kann es sehr empfehlen. Es gibt auch eine O'Reilly book und ist wahrscheinlich das am häufigsten verwendete Template-System im Perl-Königreich (innerhalb oder außerhalb von Web-Frameworks).

Ein anderer Ansatz, auf den ich mehr und mehr hingewiesen habe, sind "Builder" -Lösungen ohne Vorlage. Module wie Template::Declare & HTML::AsSubs passen diese Rechnung.

2

Sie können die Präsentation auch vom Code trennen und einfach ein Templating-System verwenden, ohne den gesamten Overhead eines vollständigen Framework einbringen zu müssen. Template Toolkit kann auf diese Art und Weise selbst verwendet werden, wie auch Mason, obwohl ich dazu tendiere, eher ein Framework zu sein, das als Templating-System getarnt ist.

Wenn Sie wirklich wollen, Code von der Präsentation zu trennen, beachten Sie, dass TT und Mason beide erlauben (oder sogar ermutigen, je nachdem, welche Dokumente Sie lesen) ausführbaren Code in die Vorlagen eingebettet werden. Persönlich finde ich, dass das Einbetten von Code in Ihren HTML-Code nicht besser ist als das Einbetten von HTML in Ihren Code. Daher tendiere ich dazu, mich für HTML::Template zu entscheiden.

10

Die Frage von CGI vs MVC-Framework für den Moment verlassen, was Sie wollen, ist eine der Ausgabe Templating-Module aus dem CPAN.

Das Template Toolkit ist sehr beliebt (Template.pm auf CPAN) Auch beliebt sind Text :: Template, HTML :: Template und HTML :: Mason.

HTML :: Mason ist viel mehr als ein Template-Modul, und als solches könnte ein wenig zu schwer für eine einfache CGI-App sein, aber es lohnt sich zu untersuchen, was für Sie am besten wäre.

Text :: Template ist relativ einfach und verwendet Perl innerhalb der Vorlagen, so dass Sie Daten überschleifen und die Anzeigelogik in Perl ausführen können. Dies wird von den Menschen als Pro und Contra angesehen.

HTML :: Vorlage ist auch klein und einfach. Es implementiert seine eigenen kleinen Tags für die Verarbeitung von if/then/else, Variableneinstellungen und Schleifen. Das ist es. Dies wird sowohl als Pro als auch als Betrug für die genau entgegengesetzten Gründe wie Text :: Template gesehen.

Template Toolkit (TT) implementiert eine sehr große, vordefinierte Vorlagensprache, die Schleifen und Logik und vieles mehr enthält.

Ich habe HTML :: Template One verwendet und gefunden, dass ich ein paar mehr Features wollte. Ich habe dann Text :: Template mit Erfolg benutzt, aber ich fand den Wunsch, mit Namespaces zu spielen, etwas nervig. Ich habe Template Toolkit kennen und lieben gelernt. Für mich fühlt es sich einfach richtig an. Ihre Laufleistung kann variieren.

Natürlich gibt es immer noch die alte "print HTML" -Methode, manchmal genügen ein paar Druckanweisungen. Aber Sie sind auf die Idee gekommen, Ihre Anzeige von Ihrer Hauptlogik zu trennen. Was ist eine gute Sache.

Es ist der erste Schritt nach unten zu Model/View/Controller (MVC), in dem Sie Ihr Datenmodell & Geschäftslogik getrennt halten (Ihren Code, der die Eingabe akzeptiert, etwas damit macht und entscheidet, was sein muss Ausgabe), Ihre Eingabe/Ausgabe (Vorlagen oder Druckanweisungen - HTML, PDF usw.) und der Code, der die beiden verbindet (CGI, CGI :: Application, Catalyst MVC Framework, etc.). Die Idee, dass eine Änderung an Ihrer Datenstruktur (im Modell) keine Änderungen an Ihren Ausgabe-Routinen (View) erfordern sollte.

+0

CGI vs MVC ist unsinnig. CGI (Common Gateway Interface) ist eine plattformunabhängige Schnittstelle zum Ausführen von externen Programmen, Software oder Gateways auf einem Web-/Informationsserver. MVC (Model-View-Controller) ist ein Entwurfsmuster, das eine Anwendung in drei Verantwortungsbereiche unterteilt. Wenn Sie Perl verwenden, um eine Webanwendung zu erstellen, verwenden Sie CGI auf die eine oder andere Weise. Die Verwendung des MVC-Entwurfsmusters ist optional und wird empfohlen, ist aber letztlich nicht mit der Verwendung von CGI verbunden. –

+0

Es ist nur unsinnig, wenn Sie die Terminologie pedantisch sind und auf den denotativen Bedeutungen von CGI und MVC bestehen, während Sie ihre konnotativen Bedeutungen ignorieren. Während es durchaus sinnvoll ist, eine CGI-Anwendung mit dem MVC-Muster zu erstellen, entwickeln sich Programmierer aus CGI.pm, CGI :: Application, etc - erstellen ihre eigene MVC-Struktur als den Fortschritt und Refactor ihren Code - zu MVC-Frameworks wie Catalyst, wo sie sich auch zu FCGI oder mod_perl entwickeln. Also Pragmatismus, kein Unsinn. –

+0

Worte bedeuten Dinge. Also, Akronyme. Als wir aufhören, uns darauf zu einigen, grunzen wir uns gegenseitig in Bäumen. http://en.wikipedia.org/wiki/Common_Gateway_Interface –

4

Eine Lösung, die ich fühle, die richtige Balance im Rahmen/Roll-your-own Dilemma ist der Einsatz von drei Schlüsseln Perl-Module: CGI.pm, Template Toolkit und DBI. Mit diesen drei Modulen können Sie eine elegante MVC-Programmierung erstellen, die einfach zu schreiben und zu warten ist.

Alle drei Module sind sehr flexibel mit Template Toolkit (TT), so dass Sie Daten in HTML, XML oder sogar PDF ausgeben können, wenn Sie müssen. Sie können in TT auch Perl-Logik einfügen und dort sogar Ihre Datenbank-Schnittstelle hinzufügen. Dies macht Ihre CGI-Skripte sehr klein und leicht zu pflegen, besonders wenn Sie das "Standard" -Pragma verwenden.

Es ermöglicht Ihnen auch, JavaScript und AJAXy Zeug in die Vorlage selbst, die die Trennung zwischen Client und Server nachahmt.

Diese drei Module gehören zu den beliebtesten auf CPAN, haben eine hervorragende Dokumentation und eine breite Benutzerbasis. Außerdem können Sie mit diesen Mitteln schnell zu mod_perl wechseln, sobald Sie Ihren Code erstellt haben, was Ihnen einen schnellen Übergang in die eingebettete Perl-Umgebung von Apache ermöglicht.

Alles in allem ein kompaktes und dennoch flexibles Toolset.

+0

Dies ist bei weitem die beste Antwort auf die gestellte Frage. –

+0

Ich würde meine Antwort aktualisieren, um Xslate, eine schnelle Templating-Lösung, in Erwägung zu ziehen. Es hat eine TT-Syntax-Option für die Migration von TT, und es ist in den frühen Phasen der Portierung nach Golang. – jeremiah

Verwandte Themen