Mit Sinatra singen

Willkommen zu Track 1 von "Mit Sinatra singen". In dieser Mini-Serie werfen wir einen Blick auf Sinatra. eine kleine, aber unglaublich leistungsstarke DSL für die schnelle Erstellung von Ruby-Webanwendungen. In diesem Teil beginnen wir mit Sinatra, indem wir mit ein paar Routen herumspielen, lernen, wie man auf URL-Parameter zugreift und wie man POST-Daten zwischen den Seiten aufnimmt.

Wenn Sie noch nicht mit Ruby gearbeitet haben, sollten Sie sich die Ruby for Newbies-Sitzung ansehen, in der Andrew Sie durch den Installationsprozess von Ruby auf Ihrem System und die Grundlagen der Sprache führt.

Als erstes müssen wir das Sinatra RubyGem installieren. Geben Sie Folgendes in das Terminal ein:

 Juwel installieren Sinatra

Installiere auch den 'Shotgun' Edelstein, den wir später verwenden werden:

 gem installieren Schrotflinte

Je nachdem, wie Sie RubyGems auf Ihrem System eingerichtet haben, müssen Sie möglicherweise das Präfix "." gem installieren Befehle mit Sudo.


Die sehr Grundlagen

Öffnen Sie Ihren Texteditor und erstellen Sie eine neue Datei mit dem Namen Grundlagen.rb. Ganz oben brauchen wir RubyGems und den Sinatra-Edelstein:

 erfordern 'rubygems' erfordern 'sinatra'

Hinweis: Wenn Sie Ruby 1.9 (was Sie sein sollten;)) ausführen, können Sie das löschen erfordern "Rubygems" Zeile als Ruby lädt RubyGems trotzdem automatisch.

Beginnen wir mit dem Klassiker "Hello World". Fügen Sie Folgendes zu Ihrem hinzu Grundlagen.rb Bewerbungsdatei:

 Get '/' do "Hallo Welt!" Ende

Dies ist eine "Route". Hier sagen wir Sinatra, ob es sich um die Heimat- oder Stamm-URL handelt '/' wird mit der normalen GET-HTTP-Methode angefordert, um "Hallo, Welt!" anzuzeigen.

Starten Sie nun im Terminal den Server durch Eingabe von ruby basics.rb. Uns wird gesagt, dass Sinatra an Hafen 4567 "die Bühne" genommen hat und wenn wir nach gehen http: // localhost: 4567 / In einem Browser sehen wir "Hallo, Welt!".

Versuchen wir also eine andere Seite:

 Holen Sie sich etwas über mich. Ende

Bei jeder Änderung Ihrer Sinatra-App müssen Sie den Server neu starten.

Dies bedeutet, wenn die '/Über' URL wird angefordert (mithilfe der GET-HTTP-Methode): "Ein wenig über mich". wird angezeigt.

Bei jeder Änderung Ihrer Sinatra-App müssen Sie den Server neu starten. Um uns den Aufwand des ständigen Anhaltens und Startens des Servers während der Entwicklung zu ersparen, verwenden wir den zuvor installierten Shotgun-Edelstein.

Stoppen Sie den aktuellen Sinatra-Server mit Strg-C. Jetzt können wir rennen Schrotflinte-Grundlagen und Shotgun startet den Server bei jeder Aktualisierung der Seite automatisch neu. Dies ist nützlich, wenn wir viel Entwicklungsarbeit leisten. Da jedoch die gesamte Anwendung neu gestartet wird, kann sie langsam sein.

Wenn Shotgun auf einen anderen Port hört, gehen wir zum Port 9393 und gehen zu http: // localhost: 9393 / über in Ihrem Browser Sie sollten den Satz sehen, den wir setzen.


Zugriff auf URL-Parameter

Sie können auch über die URL auf Parameter zugreifen. Fügen Sie Folgendes zu Ihrem hinzu Grundlagen.rb Datei:

 Get '/ hello /: name' do params [: name] ende

In diesem Beispiel haben wir eine Route, bei der etwas danach folgt '/Hallo/' wird in einem enthalten sein Params Array mit dem Schlüssel :Name. Das Params Array enthält alle GET- und POST-Variablen. Wenn Sie aus einem PHP-Hintergrund kommen, ähnelt dies dem $ _REQUEST globales Array.

Gehen Sie beispielsweise im Browser zu, http: // localhost: 9393 / hallo / dan und Sie sollten den Namen wieder sehen ("dan").

Sie könnten das integrieren :Name in einen String einwickeln $ ? . Ersetzen Sie das Params [: Name] Zeile mit:

 "Hallo, # params [: name]."

Wie zu erwarten, können wir alle normalen Ruby-Methoden für die Variable verwenden, wie z .upcase, .umkehren usw.

 "Hallo dort # params [: name] .upcase."

Sie können die Route so einstellen, dass mehrere Abfragezeichenfolgenvariablen akzeptiert werden:

 get '/ hello /: name /: city' do "Hey dort # params [: name] von # params [: city]." Ende

Neben normalen Variablen in einer URL können Sie mit Sinatra auch Wildcard-Abfragezeichenfolgen ("Splat") abrufen, indem Sie ein Sternchen wie folgt verwenden:

 Holen Sie sich '/ more / *' und tun Sie params [: splat] end

Alles, was in der URL enthalten ist /Mehr/ wird durch die erreichbar sein : splat geben Sie den ein Params Array.


Dateien und POST anzeigen

Jetzt lass uns etwas interessanter machen. Lassen Sie uns ein Formular erstellen, um Daten vom Benutzer abzurufen, und dann etwas damit zu tun. Wir verwenden auch eine "View-Datei", mit der wir das Markup für eine View in eine separate Datei aufteilen können. Fügen Sie die folgende Route zu Ihrem hinzu Grundlagen.rb App-Datei:

 get '/ form' do erb: Formularende

Diese Route lädt die form.erb ERB-Datei (Embedded Ruby) von a Ansichten / Verzeichnis. ERB-Dateien sind normalerweise normale HTML-Dateien, in die Sie Ruby-Code einfügen können Tags, die analysiert werden, bevor sie an den Browser gesendet werden - genauso wie Sie PHP- oder ASP-Code in eine Webseite einbinden.

So erstellen Sie eine Ansichten / Verzeichnis im selben Ordner wie das Grundlagen.rb Datei. Und drinnen Ansichten /, Erstellen Sie die Datei mit dem Namen form.erb mit folgendem Inhalt:

 Hallo aus der Sicht

Richten Sie Ihren Browser auf http: // localhost: 9393 / form und Sie sollten die Nachricht sehen, die wir in der Ansichtsdatei eingestellt haben.

Jetzt wissen wir, dass alles funktioniert. Ändern Sie den Inhalt dieser Datei in:

 

Aktualisieren Sie die Seite und Sie sollten das Formular sehen:

Geben Sie jedoch eine Nachricht in das Textfeld ein und klicken Sie auf die Schaltfläche "Senden". Die Sinatra-Fehlerseite informiert Sie darüber, dass für diese URL keine Route vorhanden ist.

Sie fragen sich vielleicht, warum dies so ist, da das Formular gesendet wird /bilden, Dieselbe URL, auf der sich das Formular befindet, daher sollte es kein Problem geben. Nun, der Unterschied ist, dass wir diese Seite über die POST-HTTP-Methode abrufen. Wie Sie auf der Fehlerseite von Sinatra sehen können, benötigt Sinatra für jede HTTP-Methode eine andere Route.

Fügen Sie der Sinatra-App die folgende Route hinzu:

 post '/ form' do "Sie sagten" # params [: message] "" ende

Diese Route gilt für die POST-Methode, nicht für GET. Außerdem sind alle POST-Variablen gleich verfügbar Params Array als GET-Variablen, damit wir die mit dem Formular übermittelte Nachricht abrufen können. Versuch es!


Sie könnten jetzt völlig für MI5 arbeiten!

Was kommt als nächstes? Erstellen wir eine Möglichkeit, eine von uns gesendete Nachricht zu "verschlüsseln", sodass sie nur von unserem beabsichtigten Empfänger gelesen werden kann. Fügen Sie der Sinatra App die folgende Route hinzu:

 Holen Sie sich '/ secret' do erb: geheimes Ende

Wahrscheinlich haben Sie jetzt den Dreh raus. Diese Route lädt die ERB-View-Datei unter Ansichten / secret.erb. Erstellen Sie diese Ansichtsdatei mit den folgenden:

 

Super Secret MI5 Message Encryptor!

Und erstellen Sie die Route für die POST-Methode:

 post '/ secret' do params [: secret] .reverse ende

OK, jetzt haben wir einen Nachrichtenverschlüsseler, der die Nachricht mit einer speziellen "Reverse" -Methode unlesbar macht. Wir brauchen eine Möglichkeit, die Nachricht zu entschlüsseln:

 get '/ decrypt /: secret' do params [: secret] .reverse end

Hier hast du es! Ein sehr geheimer, hochsicherer Nachrichtenverschlüsseler, der für alle Geheimdienste eines Landes gut genug ist.

Haftungsausschluss: Wenn wir "sehr sicher" und "Verschlüsselung" sagen, werden die Buchstaben nur umgekehrt. Es tut uns leid.


Vierundvierzig?

Zum Schluss werden noch 404 Fehlerseiten behandelt. Wenn Sie jetzt zu einer URL gehen, für die es keine Route gibt (z. B.. / danisthebest), sehen Sie die fantastische Fehlermeldung von Sinatra. Auf einer echten App möchten wir unseren eigenen Fehler anzeigen. Verwenden Sie dazu einfach die nicht gefunden Route wie folgt:

 not_found do status 404 'nicht gefunden' end

Hier benutzen wir Sinatra's Status Methode zum Setzen des HTTP-Statuscodes der Seite auf 404 (Sie können dieselbe Statusmethode verwenden, um Statuscodes festzulegen, z. B. 201, wenn etwas erstellt wird, oder 403, wenn eine Anmeldung nicht erfolgreich war.).

Sie könnten das weiter umgestalten nicht gefunden Route mithilfe von Sinatra Halt Methode:

 not_found do halt 404, 'page not found' end

Fazit

Du hast also dein erstes Duett mit Sinatra aufgeführt! Hoffentlich können Sie sehen, wie einfach dieses DSL die Erstellung von Web-Apps ermöglicht.

Auf der nächsten Spur erstellen wir eine einfache "To-Do" -App, die mit einer SQLite-Datenbank verbunden ist. Wir werden auch einen Blick auf das Flüchtige werfen STELLEN und HTTP LÖSCHEN Methoden, von denen niemand gehört hat.

Hinweis: Sie können die endgültigen Projektdateien für dieses Lernprogramm in GitHub durchsuchen.