• Publicidad

Mojolicius y mysql

Todo lo relacionado con el desarrollo Web con Perl: desde CGI hasta Mojolicious

Mojolicius y mysql

Notapor memrobles » 2017-11-13 02:14 @134

Hola, perleros. Buenas.

En Mojolicious, ¿alguien sabe cómo pasar un campo de una base de datos a mi página en general? He leído por horas y he encontrado esto:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. use Mojolicious::Lite;
  2. use Mojo::mysql;
  3.  
  4. helper mysql => sub { state $pg = Mojo::mysql->new('mysql://sri:s3cret@localhost/db') };
  5.  
  6. get '/' => sub {
  7.     my $c  = shift;
  8.     my $db = $c->mysql->db;
  9.     $c->render( json => $db->query('select now() as time')->hash );
  10. };
  11.  
  12. app->start;
  13.  
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4

pero no sé cómo pasar el resultado a mi página web.

Esta es mi página:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. use Mojolicious::Lite;
  2.  
  3. get '/mipagina';
  4.  
  5. app->start;
  6. __DATA__
  7.  
  8. @@ mipagina.html.ep
  9. % title 'Green';
  10. % layout 'green';
  11. Hello World!
  12.  
  13. @@ layouts/green.html.ep
  14. <!DOCTYPE html>
  15. <html>
  16.   <head><title><%= title %></title></head>
  17.   <body><%= content %></body>
  18. </html>
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


He llegado a esto:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/env perl
  2. use Mojolicious::Lite;
  3. use Mojo::mysql;
  4.  
  5. helper mysql => sub { state $pg = Mojo::mysql->new('mysql://mysql://sri:s3cret@localhost/db') };
  6.  
  7. get '/index' => sub {
  8.     my $c  = shift;
  9.     my $db = $c->mysql->db;
  10.     $db->query('select now() as time')->hash;
  11. };
  12.  
  13. app->start;
  14.  
  15. __DATA__
  16.  
  17. @@ index.html.ep
  18. <!DOCTYPE html>
  19. <html>
  20.   <head><title><%= title %></title></head>
  21.   <body><%= $db %></body>
  22. </html>
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

pero no logro hacer que funcione. ¿Alguien me podría ayudar, por favor :)?
memrobles
Perlero nuevo
Perlero nuevo
 
Mensajes: 27
Registrado: 2015-12-07 15:05 @670

Publicidad

Re: Mojolicius y mysql

Notapor explorer » 2017-11-13 15:20 @681

No estás llamando al método render(), que es justo el que crea la página y la manda al usuario.

Dentro de ese método debes indicar dónde está la plantilla. En tu caso la tienes incluida en el propio código, y la llamas index.html.ep.

Entonces, son dos movimientos los que tienes que hacer. El primero es recuperar la información de la consulta y pasarla a una estructura Perl. Fíjate que en el primer ejemplo se llama al método hash() después de hacer la consulta. El segundo movimiento es pasar esa estructura Perl a render(), para que muestre la página.

$c->render(template => 'index', format => 'html');

Si la estructura es muy compleja, o muy sencilla, puedes usar el método stash() para modificar el valor de las variables que usas en la plantilla.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Mojolicius y mysql

Notapor memrobles » 2017-11-13 20:39 @902

Gracias explorer.

Finalmente quedo a si funcionando.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2.   use Mojolicious::Lite;
  3.   use Mojo::mysql;
  4.  
  5.   helper mysql =>
  6.     sub { state $pg = Mojo::mysql->new('mysql://sri:s3cret@localhost/db') };
  7.  
  8.   get '/index' => sub {
  9.     my $c  = shift;
  10.     my $db = $c->mysql->db;
  11.    my @result = $db->query('select now() as time')->hash;
  12.    return $c->render(template => 'index', result => @result );
  13.  
  14.   };
  15.  
  16. app->start;
  17.  
  18.  
  19. __DATA__
  20.  
  21. @@ index.html.ep
  22. <!DOCTYPE html>
  23. <html>
  24. <head><title><%= title %></title></head>
  25. <body><%= dumper $result %></body>
  26. </html>
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
memrobles
Perlero nuevo
Perlero nuevo
 
Mensajes: 27
Registrado: 2015-12-07 15:05 @670

Re: Mojolicius y mysql

Notapor memrobles » 2017-11-13 20:48 @908

Otra manera de hacerlo es

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2.   use Mojolicious::Lite;
  3.   use Mojo::mysql;
  4.  
  5.   helper mysql => sub {
  6.       state $pg = Mojo::mysql->new('mysql://sri:s3cret@localhost/db') };
  7.  
  8.   get '/index' => sub {
  9.     my $c  = shift;
  10.     my $db = $c->mysql->db;
  11.    return $c->render(template => 'index', db => $db );
  12.  
  13.   };
  14.  
  15. app->start;
  16.  
  17.  
  18. __DATA__
  19.  
  20. @@ index.html.ep
  21. <% my $result = $db->query('select now() as time')->hash; %>
  22. <!DOCTYPE html>
  23. <html>
  24. <head><title><%= title %></title></head>
  25. <body><%= dumper $result %></body>
  26. </html>
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Esto es divertido :D
memrobles
Perlero nuevo
Perlero nuevo
 
Mensajes: 27
Registrado: 2015-12-07 15:05 @670

Re: Mojolicius y mysql

Notapor memrobles » 2017-11-14 01:10 @090

Buenas, pues ya no tan divertido, jeje :cry: .

Ahora me he dado cuenta que solo me trae el primer registro de la base de datos. A leer se ha dicho -_-
Slds
memrobles
Perlero nuevo
Perlero nuevo
 
Mensajes: 27
Registrado: 2015-12-07 15:05 @670

Re: Mojolicius y mysql

Notapor explorer » 2017-11-14 10:31 @480

Con sistemas de plantillas más viejas, había que hacer un bucle para obtener todos los resultados, transformalos a código HTML, y eso es lo que se ponía en el receptáculo de la plantilla.

Yo... supongo... que con el sistema de plantillas actual pasará algo parecido porque Mojolicious no sabe cómo representar cada registro. Es decir, si le mando un array al receptáculo, ¿cómo sabe Mojolicious que debe representar cada elemento como una fila de una tabla?

Apuesto a que debe existir un módulo en Perl que hace algo parecido.

No, pero casi:
http://blogs.perl.org/users/joel_berger ... ample.html (en inglés)
https://connect.ed-diamond.com/GNU-Linu ... andler-3-3 (en francés)
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Mojolicius y mysql

Notapor memrobles » 2017-11-14 20:16 @886

Hola, explorer. Al parecer hay que poner hashes en vez de hash.

https://metacpan.org/pod/Mojo::mysql::Results#hashes

Voy a probar y comento.

Slds y gracias :)
memrobles
Perlero nuevo
Perlero nuevo
 
Mensajes: 27
Registrado: 2015-12-07 15:05 @670

Re: Mojolicius y mysql

Notapor explorer » 2017-11-15 04:00 @208

El método hash() te devuelve el siguiente registro del resultado de la consulta, mientras que el método hashes() devuelve todos los registros.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. # Procesa una fila cada vez
  2. while (my $siguiente = $resultados->hash) {
  3.   say $siguiente->{dinero};
  4. }
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. # Procesa todas las filas de una vez
  2. say $resultados->hashes->reduce(sub { $a->{dinero} + $b->{dinero} });
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Así que... puedes elegir el que te resulte más cómodo.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Mojolicius y mysql

Notapor memrobles » 2017-11-15 18:17 @803

Gracias, explorer, por tu atención.

Pero creo me pasaré a laravel/php o cgi/perl. Esto está muy difícil :cry:


Gracias y slds.
memrobles
Perlero nuevo
Perlero nuevo
 
Mensajes: 27
Registrado: 2015-12-07 15:05 @670

Re: Mojolicius y mysql

Notapor explorer » 2017-11-16 06:12 @300

Cada uno suele usar las herramientas que conoce, si no tenemos tiempo para aprender nuevas y mejores herramientas.

Es lo que sucede, por ejemplo, con el módulo CGI, que ya no viene incluido con las distribuciones Perl, ya que genera código muy antiguo y difícil de mantener, comparado con el protocolo recomendado, el PSGI/Plack.

Aquí tienes alternativas a CGI: CGI::Alternatives

Mira la que opina la comunidad sobre CGI: https://youtu.be/7_r1gpTkFYo?t=300
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Siguiente

Volver a Web

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 2 invitados