how to create a simple web application with web::app template::toolkit and class::dbi

Post on 19-Jan-2016

26 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

DESCRIPTION

How to create a simple Web application with Web::App Template::Toolkit and Class::DBI. Leonard Miller June 17, 2008. Who is this talk for?. Who is this talk for?. Need to write web applications. Who is this talk for?. Need to write web applications Don’t want/cannot have a heavy framework. - PowerPoint PPT Presentation

TRANSCRIPT

How to create a simple Web application with Web::App

Template::Toolkit and Class::DBI

Leonard MillerJune 17, 2008

Who is this talk for?

Who is this talk for?

• Need to write web applications

Who is this talk for?

• Need to write web applications

• Don’t want/cannot have a heavy framework

Who is this talk for?

• Need to write web applications

• Don’t want/cannot have a heavy framework

• Experienced Programmers.

Who is this talk for?

• Need to write web applications

• Don’t want/cannot have a heavy framework

• Experienced Programmers.

• Know about CPAN, how to learn from CPAN’s documentation.

Who is this talk for?

• Need to write web applications• Don’t want/cannot have a heavy

framework• Experienced Programmers.• Know about CPAN, how to learn from

CPAN’s documentation.• Newer programmers that could use a

new/better way to organize their code.

Why these three Modules?

• Separate out the code to MVC Pieces

• Each can be used/tested alone

• The modules themselves are easy to use and understand

Why not Catalyst?

• mod_perl/fastcgi: You don’t always have the access on the machine to get Catalyst to work.

• CGI::Application is a ‘lite’ framework, and as such is much smaller.

• Not as big and scary.• Trivial to install in a local ~/lib dir

What is MVC

• MVC stands for Model-View-Controller

What is MVC

• MVC breaks the work into three parts

What is MVC

• MVC breaks the work into three parts1. Model - Short for database model.

Class::DBI does all the database work: inserts/queries.

What is MVC

• MVC breaks the work into three parts1. Model - Short for database model.

Class::DBI does all the database work: inserts/queries.

2. View - Template::Toolkit does all the view/html work.

What is MVC

• MVC breaks the work into three parts1. Model - Short for database model.

Class::DBI does all the database work: inserts/queries.

2. View - Template::Toolkit does all the view/html work.

3. Controller - CGI::Application holds all the logic to glue the Model and the View together.

What is MVC

• Who has seen code like this:use DBI;my $sql = "select * from users";my $dbh = DBI->connect( $ds, $un, $pw );my $sth = $dbh->prepare($sql);$sth->execute();print "Content-type: text/html\r\n\r\n";while (my $h = $sth->fetchrow_hashref()){ print ”Name is:".$h->{'first_name'}."<br>\n";}

What is MVC

• Who has seen code like this:my $q = new CGI;

if ($q-> param('first_name' eq ''){ print input_form();}else{ my $sql = "insert into users ..."; my $sth = $dbh->prepare($sql); $sth->execute(); print submission_form();}

What is MVC

• Any questions regarding what MVC is?

CGI::Application• A sample program• Helloworld.cgi <- config info• HelloWorldCgiApp.pm <- controller• Html files: <- View

– header.html– body.html– footer.html

• MyDatabase.pm <- Model

CGI::Applicationhelloworld.cgi:

use HelloWorldCgiApp;

my $helloworld = HelloWorldCgiApp->new();

$helloworld->run();

CGI::Applicationhelloworld.cgi (with config info):

use HelloWorldCgiApp;my $helloworld = HelloWorldCgiApp->new ( PARAMS => { tt_config => { INCLUDE_PATH => ".", PRE_PROCESS => 'header.html', POST_PROCESS => 'footer.html', }, hw_string => "hi there big earth!", }, );$helloworld->run();

CGI::ApplicationHelloWorldCgiApp (continued):

package HelloWorldCgiApp;

use base 'CGI::Application';

use Template;

sub setup {

my $self = shift;

$self->run_modes( 'mode1' => 'start’,

'mode2' => 'sec_page'

);

$self->start_mode('mode1');

}

CGI::ApplicationHelloWorldCgiApp (continued):

package HelloWorldCgiApp;

use base 'CGI::Application';

use Template;

sub setup {

my $self = shift;

$self->run_modes( 'mode1' => 'start’,

'mode2' => 'sec_page'

);

$self->start_mode('mode1');

}

$q -> param (‘rm’);

CGI::ApplicationHelloWorldCgiApp (continued):

sub start {

my $self = shift;

my $tt_config = $self->param(‘tt_config’)

my $tt = Template->new( $tt_config );

$tt->process('body.html',

{

hwstr => 'hi big planet!!!',

},

\$html);

return $html;

}

CGI::ApplicationHelloWorldCgiApp (continued):

sub cgiapp_prerun

{

my ($self, $runmode) = @_;

my $q = $self->query;

}

Class::DBI• The mysql table:

CREATE TABLE users (

user_id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,

first_name varchar(75) NOT NULL,

last_name varchar(75) NOT NULL,

country_code CHAR(2) NULL

);

Class::DBIMyDatabase.pm:

package MyDatabase;

use base 'Class::DBI';

MyDatabase->connection('dbi:mysql:db',‘user’,’pw');

MyDatabase -> table('users');

MyDatabase -> columns( All => qw/user_id

first_name last_name country_code / );

MyDatabase -> columns( Primary => user_id );

Class::DBI• Using the Class::DBI ModuleHelloWorldCgiApp.pm:

use MyDatabase;

my @users = MyDatabase -> retrieve_all;

$tt->process('body.html',

{

users => [ @users ],

},

\$html);

Class::DBI

• Using the Module

use MyDatabase;my @users = MyDatabase -> retrieve_all;my $user = MyDatabase -> retrieve( 1 );$tt->process('body.html', { users => [ @users ], user => $user, }, \$html);

Class::DBI

• Using the Module – inserts:

use MyDatabase;

my $user = MyDatabase -> insert(

{

first_name => ‘Randall’,

last_name => ‘Schwartz’,

country_code => ‘US’,

}

);

Template::Toolkit

• Why use Template::Toolkit?– Common ‘look and feel’ templates.

• Easy to change for those people who are better at design than we are.

– What type of data is It good for?• arrays• hashes• scalars

Template::Toolkit

• Any html file is a TT file!

• Simplest usage for a scalar:<html>

<body>

[% var_name %]

</body>

</html>

Template::Toolkit

• Usage for an Array where users is an array:

<body>

[% FOREACH item IN users %]

[% item %]<br />

[% END %]

</body>

Template::Toolkit

• Usage for an Array where users is a hash:

<body>

[%item.user_id%] [%item.first_name%] [%item.last_name%] [%item.country_code%] <br />

</body>

Template::Toolkit

• Usage for an Array where users is an array of hashes (like an array of rows from a database):

<body>

[% FOREACH item IN users %]

[%item.user_id%] [%item.first_name%]

[%item.last_name%] [%item.country_code%]<br />

[% END %]

</body>

Template::Toolkit

• Usage for an Array where users is an array of hashes (like an array of rows from a database):

<body>

<form>

<input type=“hidden” name=“rm” value=“page_2”

[% FOREACH item IN users %]

...

[% END %]

<input type=“submit”>

</form>

</body>

Questions?

Thank you

Leonard MillerJune 17, 2008

top related