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
.
Ö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.
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.
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!
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.
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
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.