Bienvenido a la Pista 1 de "Cantando con Sinatra". En esta miniserie echaremos un vistazo a Sinatra; Un DSL pequeño, pero increíblemente poderoso para crear rápidamente aplicaciones web de Ruby. En esta parte, comenzaremos con Sinatra jugando con algunas rutas, aprendiendo cómo acceder a los parámetros de URL y cómo POST datos entre páginas..
Si no has trabajado con Ruby antes, deberías revisar la sesión de Ruby for Newbies, donde Andrew te guiará en el proceso de instalación de Ruby en tu sistema y aprenderá los conceptos básicos del idioma..
Lo primero que tenemos que hacer es instalar el RubyGem Sinatra. Ingrese lo siguiente en la Terminal:
gema instalar sinatra
También instale la gema 'shotgun', que usaremos más adelante:
gema instalar escopeta
Dependiendo de cómo haya configurado RubyGems en su sistema, es posible que tenga que prefijar instalación de gemas
comandos con sudo
.
Abra su editor de texto y cree un nuevo archivo llamado basics.rb
. Justo en la parte superior, necesitamos requerir RubyGems y la gema Sinatra:
requieren 'rubygems' requieren 'sinatra'
Nota: Si está ejecutando Ruby 1.9 (que debería ser;)), puede soltar el requieren 'rubygems'
línea como Ruby carga automáticamente RubyGems de todos modos.
Empecemos por crear el clásico "Hello World". Agregue lo siguiente a su basics.rb
archivo de solicitud:
get '/' do "Hello, World!" fin
Esta es una 'Ruta'. Aquí, le estamos diciendo a Sinatra que si la URL del inicio o la raíz '/'
se solicita, usando el método GET HTTP normal, para mostrar "¡Hola, Mundo!"
Ahora, en el terminal, vamos a iniciar el servidor escribiendo ruby basics.rb
. Nos dicen que Sinatra ha "subido al escenario" en el puerto 4567, y si vamos a http: // localhost: 4567 /
En un navegador, vemos "¡Hola, mundo!".
Así que vamos a probar otra página:
get '/ about' do 'Un poco sobre mí'. fin
Cada vez que realice un cambio en su aplicación Sinatra, deberá reiniciar el servidor..
Esto significa que si el '/acerca de'
Se solicita la URL (usando el método GET HTTP), "Un poco sobre mí". mostrará.
Cada vez que realice un cambio en su aplicación Sinatra, deberá reiniciar el servidor. Por lo tanto, para evitar la molestia de detener e iniciar constantemente el servidor durante el desarrollo, usaremos la gema Shotgun que instalamos anteriormente..
Detenga el servidor actual de Sinatra con Ctrl-C
. Ahora podemos correr basics de escopeta.rb
y Shotgun reiniciará automáticamente el servidor cada vez que actualizamos la página. Esto es útil cuando estamos haciendo mucho trabajo de desarrollo, pero a medida que se reinicia toda la aplicación, puede ser lento.
Como la escopeta está escuchando en un puerto diferente, vamos al puerto 9393 y vamos a http: // localhost: 9393 / acerca de
en tu navegador Deberías ver la frase que ponemos.
También puede acceder a los parámetros desde la URL. Agregue lo siguiente a su basics.rb
expediente:
get '/ hello /: name' do params [: name] end
En este ejemplo, tenemos una ruta donde nada después '/Hola/'
será contenido en un params
matriz con la clave :nombre
. los params
array contiene todas las variables GET y POST. Si viene de un fondo PHP, esto es similar al $ _REQUEST
matriz global.
En el navegador, vaya a, por ejemplo,, http: // localhost: 9393 / hello / dan
y debería ver el nombre mostrado de nuevo ("dan").
Podrías incorporar el :nombre
en una cadena envolviéndolo PS
. Intenta reemplazar el params [: nombre]
linea con:
"Hola, # params [: name]".
Como era de esperar, podemos usar todos los métodos normales de Ruby en la variable, como .upcase
, .marcha atrás
etc.
"Hola, hay # params [: name] .upcase".
Puede configurar la ruta para que acepte múltiples variables de cadena de consulta de la siguiente manera:
get '/ hello /: name /: city' do "Hey there # params [: name] from # params [: city]." fin
Además de las variables normales en una URL, Sinatra le permite incluir cadenas de consulta de comodines, conocidas como "splat", usando un asterisco como:
get '/ more / *' do params [: splat] end
Cualquier cosa incluida en la URL después de /Más/
será accesible a través de la : splat
clave en el params
formación.
Ahora hagamos algo un poco más interesante. Vamos a crear un formulario para recuperar datos del usuario, luego hacer algo con él. También usaremos un "archivo de vista", que nos permite dividir el marcado para una vista en un archivo separado. Agregue la siguiente ruta a su basics.rb
archivo de aplicación:
get '/ form' do erb: form end
Esta ruta cargará el form.erb
ERB (Embedded Ruby) de un archivo puntos de vista/
directorio. Los archivos ERB suelen ser archivos HTML normales que le permiten incluir código Ruby en su interior Etiquetas, que se analizarán antes de enviarse al navegador, de la misma manera que se incluye el código PHP o ASP en una página web..
Así que crea un puntos de vista/
directorio en la misma carpeta que la basics.rb
expediente. Y dentro puntos de vista/
, crear el archivo llamado form.erb
Con el siguiente contenido dentro:
hola desde la vista
Apunta tu navegador a http: // localhost: 9393 / form
y debería ver el mensaje que configuramos en el archivo de vista.
Ahora que sabemos que todo está funcionando, cambie el contenido de ese archivo a:
Actualiza la página y deberás ver el formulario:
Sin embargo, ingrese un mensaje en el cuadro de texto y haga clic en el botón Enviar, y verá la página de error de Sinatra que nos informa que no existe una ruta para esta URL..
Quizás se esté preguntando por qué es esto, ya que el formulario se envía a /formar
, La misma URL en la que se encuentra el formulario, por lo que no debería haber ningún problema. Bueno, la diferencia es que estamos recuperando esta página mediante el método POST HTTP, y como puede ver en la página de errores que Sinatra nos presenta, Sinatra requiere una ruta diferente para cada método HTTP.
Así que agregue la siguiente ruta a la aplicación Sinatra:
publicar '/ form' do "Has dicho '# params [: message]'" final
Esta ruta es para el método POST, no GET. Además, todas las variables POST están disponibles en el mismo params
matriz como variables GET, por lo que podemos recuperar el mensaje enviado con el formulario. Pruébalo!
Entonces, ¿qué sigue? Creemos una forma de "cifrar" un mensaje que enviemos para que solo pueda ser leído por nuestro destinatario. Agrega la siguiente ruta a la aplicación Sinatra:
get '/ secret' do erb: final secreto
Probablemente ya te hayas familiarizado con esto. Esta ruta cargará el archivo de vista ERB en vistas / secreto.erb
. Crea ese archivo de vista con lo siguiente:
Super Secret MI5 Message Encryptor!
Y crea la ruta para el método POST:
post '/ secret' do params [: secret] .reverse end
De acuerdo, ahora tenemos un cifrador de mensajes que utiliza un método especial "inverso" para hacer que el mensaje parezca ilegible, necesitamos una forma de descifrar el mensaje:
get '/ decrypt /: secret' do params [: secret] .reverse end
¡Ahí tienes! Un encriptador de mensajes súper secreto y altamente seguro, lo suficientemente bueno para la agencia de inteligencia de cualquier país.
Nota legal: Cuando decimos "altamente seguro" y "cifrado", en realidad estamos invirtiendo las letras. Lo siento.
Una última cosa que vamos a tocar es 404 páginas de error. Ahora mismo, si va a una URL para la que no hay una ruta (por ejemplo,. / danisthebest
), verá el elegante mensaje de error de Sinatra. En una aplicación real nos gustaría mostrar nuestro propio error. Para hacer esto, simplemente use el extraviado
ruta, como tal:
not_found do status 404 'not found' end
Aquí estamos usando la de Sinatra. estado
método para configurar el código de estado HTTP de la página en 404 (puede usar este mismo método para configurar cualquier código de estado, como 201 cuando se crea algo, o 403 cuando no se pudo iniciar sesión).
Usted podría refactorizar aún más el extraviado
ruta utilizando Sinatra detener
método:
not_found do halt 404, 'page not found' end
¡Así que has realizado tu primer dueto con Sinatra! Esperemos que pueda ver lo fácil que hace este DSL al crear aplicaciones web..
En la siguiente pista, crearemos una aplicación simple de "tareas pendientes" conectada a una base de datos SQLite. También echaremos un vistazo a los esquivos. PONER
y ELIMINAR HTTP
métodos de los que nadie ha oído hablar.
Nota: Puede navegar por los archivos de proyecto finales para este tutorial en GitHub.